Небольшой вопрос о синхронизации программ в Linux: команда time позволяет измерить время выполнения программы:
[ed@lbox200 ~]$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.004s
Который работает отлично. Но если я пытаюсь перенаправить вывод в файл, это не удается.
[ed@lbox200 ~]$ time sleep 1 > time.txt
real 0m1.004s
user 0m0.001s
sys 0m0.004s
[ed@lbox200 ~]$ cat time.txt
[ed@lbox200 ~]$
Я знаю, что есть другие реализации времени с опцией -o для записи файла, но мой вопрос касается команды без этих опций.
Какие-либо предложения ?
Ответы:
Пытаться
который объединяет STDERR «времени» и вашу команду в time.txt
Или использовать
который помещает STDERR из «сна» в файл «sleep.stderr» и только STDERR из «времени» переходит в «time.txt»
источник
time
оценивает.{ time sleep 1; } 2>&1 | grep real
. Это отправляет stderr в stdout, который затем может прочитать grep.Заверните
time
и команду, которую вы рассчитываете в набор скобок.Например, в следующий раз
ls
и записывает результатls
и результаты синхронизации вoutfile
:Или, если вы хотите отделить вывод команды от захваченного вывода из
time
:источник
Просто. У
time
утилиты GNU есть опция для этого.Но вы должны убедиться, что вы не используете встроенную
time
команду вашей оболочки , по крайней мереbash
встроенная не предоставляет эту опцию! Вот почему вам нужно указать полный путь кtime
утилите:источник
Если вас волнует вывод ошибок команды, вы можете разделить их, как это, при этом используя встроенную команду времени.
или
Как видите, ошибки команды переходят в файл (поскольку
stderr
он используется дляtime
).К сожалению, вы не можете отправить его на другой дескриптор (например
3>&2
), так как он больше не будет существовать вне{...}
Тем не менее, если вы можете использовать время GNU, просто делайте то, что сказал @Tim Ludwinski.
источник
Поскольку вывод команды 'time' является выводом ошибки, перенаправьте его как стандартный вывод, чтобы сделать дальнейшую обработку более понятной.
источник
Если вы используете время GNU вместо встроенного в bash, попробуйте
(Примечание: формат времени GNU немного отличается от встроенного в bash).
источник
\time -o outfile command
(с ``) для использования GNU вместо встроенного.в твоем случае
затем
источник
time
бинарный файл, онout
будет содержать что-то вродеbash: time: command not found
.Я закончил тем, что использовал:
источник
Преимущество этого заключается в том, что не создаются субоболочки, и в конечном конвейере его stderr восстанавливается до реального stderr.
источник
Если вы не хотите трогать stdout и stderr исходного процесса, вы можете перенаправить stderr в файловый дескриптор 3 и обратно:
Вы можете использовать это для оболочки (например, для cronjobs) для мониторинга времени выполнения:
источник
Если вы используете,
csh
вы можете использовать:Например:
источник