Próbowałem przekierować dane wyjściowe polecenia czasu, ale nie mogłem:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
W pliku widzę dane wyjściowe ls
polecenia, a nie time
. Proszę wyjaśnij, dlaczego nie mogłem i jak to zrobić.
shell
unix
time
io-redirection
abubacker
źródło
źródło
Odpowiedzi:
możesz przekierować wyjście czasu za pomocą,
Ponieważ musisz potraktować (time ls) jako pojedyncze polecenie, aby móc używać nawiasów klamrowych.
źródło
&>
, gdzie mogę się o tym dowiedzieć?&>file
jest analogiczne do>file 2>&1
. Kieruje zarówno stdout, jak i stderr.nie ma potrzeby uruchamiania powłoki podrzędnej. Użyj bloku kodu.
lub
źródło
2>
proszę. Gdzie mogę się o tym dowiedzieć?Czas polecenia wysyła dane wyjściowe do STDERR (zamiast STDOUT). Dzieje się tak, ponieważ polecenie wykonywane normalnie z czasem (w tym przypadku ls) wysyła do STDOUT.
Jeśli chcesz uchwycić wynik czasu, wpisz:
To przechwytuje tylko wynik czasu, ale wyjście ls przechodzi normalnie do konsoli. Jeśli chcesz przechwycić oba w jednym pliku, wpisz:
2> przekierowuje STDERR, &> przekierowuje oba.
źródło
czas jest wbudowany w powłokę i nie jestem pewien, czy istnieje sposób na przekierowanie go. Możesz jednak użyć
/usr/bin/time
zamiast tego, który zdecydowanie akceptuje wszelkie przekierowania wyjściowe.źródło
bash time mycmd 2>file
. Lub po prostu zadzwoń,/usr/bin/time
jak wspomniano.Jeśli nie chcesz mieszać wyjścia z
time
i polecenia. Z czasem GNU możesz użyć-o file
:while
tim
jest wyjściem czasuout
ierr
są stdout i stderr zgrep
.źródło
Przyczyną, dla której przekierowanie wydaje się nie działać,
time
jest to, że jest to zarezerwowane słowo basha (nie wbudowane!), Gdy jest używane przed potokiem. bash (1):Tak więc, aby przekierować wyjście
time
, użyj nawiasów klamrowych:Lub zadzwoń
/usr/bin/time
:źródło
Do testów używam przekierowania metody stdout i stderr z nawiasami klamrowymi. Oznacza to jednak krótszy. Nawiasy klamrowe wykonają polecenie (polecenia) w bieżącej powłoce. Zobacz: człowiek bash
&>>rpt
>>rpt 2>&1
źródło