GNU/Linux >> Znalost Linux >  >> Linux

Přesměrovat výstup příkazu time v unixu do proměnné v bash?

Řešení 1:

X=`(čas ls) 2>&1 | grep real`

Řešení 2:

Viz BashFAQ/032.

$ # captures output of command and time
$ time=$( TIMEFORMAT="%R"; { time ls; } 2>&1 )    # note the curly braces

$ # captures the time only, passes stdout through
$ exec 3>&1 4>&2
$ time=$(TIMEFORMAT="%R"; { time ls 1>&3 2>&4; } 2>&1)
bar baz
$ exec 3>&- 4>&-

Čas bude vypadat jako "0,000" pomocí TIMEFORMAT="%R" což bude „skutečný“ čas.

Řešení 3:

Čas zapíše svůj výstup do STDERR spíše než do STDOUT. Aby toho nebylo málo, ve výchozím nastavení je 'time' vestavěný příkaz shellu, takže pokud se pokusíte 'time ls 2>&1', '2>&1' se vztahuje pouze na 'ls'.

Řešením by pravděpodobně bylo něco jako:

/usr/bin/time -f 'real %e' -o OUTPUT_FILE ls > /dev/null 2>&1<br>
REALTIME=$(cat OUTPUT_FILE | cut -f 2 -d ' ')

Existuje více efektních způsobů, jak to udělat, ale to je jasný/jednoduchý způsob.


Linux
  1. Proč je nastavení proměnné před příkazem v Bash legální?

  2. Automaticky zachytit výstup posledního příkazu do proměnné pomocí Bash?

  3. Přesměrujte veškerý výstup do souboru v Bash

  1. Přesměrování výstupu příkazu do proměnné v bash se nezdaří

  2. předání grepu do proměnné v bash

  3. Výstupní kód přiřazení proměnné k substituci příkazu v Bash

  1. Jak přiřadit výstup příkazu Linux k proměnné

  2. Jak přiřadit výstup příkazu proměnné shellu?

  3. Podrobný výstup příkazu Bash find