Małe pytanie dotyczące programów czasowych w systemie Linux: komenda time pozwala zmierzyć czas wykonywania programu:
[ed@lbox200 ~]$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.004s
Które działa dobrze. Ale jeśli spróbuję przekierować dane wyjściowe do pliku, nie powiedzie się.
[ed@lbox200 ~]$ time sleep 1 > time.txt
real 0m1.004s
user 0m0.001s
sys 0m0.004s
[ed@lbox200 ~]$ cat time.txt
[ed@lbox200 ~]$
Wiem, że istnieją inne implementacje czasu z opcją -o do napisania pliku, ale moje pytanie dotyczy polecenia bez tych opcji.
Jakieś sugestie ?
Odpowiedzi:
Próbować
który łączy STDERR „time” i twoje polecenie w time.txt
Albo użyj
który wstawia STDERR z „sleep” do pliku „sleep.stderr” i tylko STDERR z „time” przechodzi do „time.txt”
źródło
time
ocenia.{ time sleep 1; } 2>&1 | grep real
. To wysyła stderr do stdout, który grep może następnie odczytać.Zawiń
time
i polecenie, które mierzysz w zestawie nawiasów.Na przykład następujące czasy
ls
i zapisuje wynikls
i wyniki pomiaru czasu woutfile
:Lub jeśli chcesz oddzielić dane wyjściowe polecenia od przechwyconego wyniku od
time
:źródło
Prosty. Narzędzie GNU
time
ma taką opcję.Ale musisz upewnić się, że nie używasz wbudowanego
time
polecenia powłoki , przynajmniejbash
wbudowane nie zapewnia tej opcji! Dlatego musisz podać pełną ścieżkętime
narzędzia:źródło
Jeśli zależy Ci na wyjściu błędu polecenia, możesz je oddzielić w ten sposób, wciąż korzystając z wbudowanego polecenia time.
lub
Jak widzisz, błędy polecenia idą do pliku (ponieważ
stderr
jest używany dotime
).Niestety nie możesz wysłać go do innego uchwytu (takiego jak
3>&2
), ponieważ nie będzie on już istniał poza{...}
To powiedziawszy, jeśli możesz wykorzystać czas GNU, po prostu rób to, co powiedział @Tim Ludwinski.
źródło
Ponieważ wyjście polecenia „czas” jest wyjściem błędu, przekieruj je, ponieważ wyjście standardowe byłoby bardziej intuicyjne w celu dalszego przetwarzania.
źródło
Jeśli używasz czasu GNU zamiast wbudowanego bash, spróbuj
(Uwaga: czas GNU formatuje się trochę inaczej niż wbudowany bash).
źródło
\time -o outfile command
(z ``) do używania GNU zamiast wbudowanego.w Twoim przypadku
następnie
źródło
time
zainstalowanego prawdziwego pliku binarnego,out
będzie zawierał coś takiegobash: time: command not found
.Skończyło się na tym, że:
źródło
Ma to tę zaletę, że nie spawnuje pocisków podrzędnych, a końcowy potok ma przywrócenie stderr do prawdziwego stderr.
źródło
Jeśli nie chcesz dotykać stdout i stderr pierwotnego procesu, możesz przekierować stderr do deskryptora pliku 3 i odwrotnie:
Możesz użyć tego dla opakowania (np. Dla cronjobs) do monitorowania środowisk wykonawczych:
źródło
Jeśli używasz
csh
, możesz użyć:Na przykład:
źródło