Я пытаюсь рассчитать время, используя:
/usr/bin/time myCommand
Однако, поскольку /usr/bin/time
пишет в stderr, если myCommand также пишет в stderr, я получу больше, чем просто вывод времени в потоке. Я хочу перенаправить весь вывод myCommand /dev/null
, но все же записать вывод времени в stderr. Используя пример myCommand, который пишет в stderr of ls /nofile
, мы видим, что (очевидно) вообще нет вывода со следующим:
$ /usr/bin/time ls /nofile 2> /dev/null
$
Без какого-либо перенаправления мы видим как вывод из ls
(в stderr), так и вывод из времени (также в stderr):
$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps
То, что я хочу, это то, что просто производит:
$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps
Любые идеи?
io-redirection
time-utility
Дэвид Дория
источник
источник
Ответы:
В ksh, bash и zsh
time
это ключевое слово, а не встроенное. Перенаправления в одной и той же строке применяются только к рассчитываемой команде, а не к ее выводуtime
.Чтобы перенаправить вывод из
time
себя в эти оболочки, вам нужно использовать дополнительный уровень группировки.Если вы используете версию автономной
time
утилиты GNU , у нее есть-o
возможность записать вывод вtime
другом месте, кроме stderr. Вы можете сделатьtime
запись в терминал:Если вы хотите, чтобы вывод не
time
содержал стандартную ошибку, вам необходим дополнительный уровень перемешивания дескриптора файла.С любой
time
утилитой вы можете вызвать промежуточную оболочку для выполнения желаемых перенаправлений. Вызов промежуточной оболочки для выполнения дополнительных действий, таких какcd
перенаправление и т. Д., Довольно распространен - это те мелочи, для которых предназначены оболочки.источник
exec
заменяет оболочку указанной программой вместо запуска этой программы в качестве подпроцесса. Некоторые оболочки выполняют эту оптимизацию автоматически, когда команда является последней в сценарии. «Промежуточная оболочка» означает только это: оболочку, которая находится междуtime
иmycommand
; это не связано с подоболочками./dev/tty
это терминал, на котором выполняется команда (он не связан с/dev/ttyNUM
физическими консолями; вы путаете с файловыми дескрипторами: stdin/dev/fd/0
и т. д.).источник
time
псевдонима bash?which time
отображается/usr/bin/time
в CentOS 5.7.type time
покажет вам:time is a shell keyword