2

Я нахожусь на Ubuntu.

Кажется, что time выводит свой результат не в STDOUT или STDERR . Вот почему я так думаю:

[siminm@amide ~]$ time echo hi
hi

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi >/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi 2>/dev/null 
hi

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi 2>&1 >/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi &>/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s

ТЕМ НЕ МЕНИЕ

[siminm@amide ~]$ /usr/bin/time echo hi 2>/dev/null 
hi

3 ответа3

2

Ваша оболочка, которая, вероятно, bash, предоставляет встроенную команду time . Существует также отдельная программа под названием time в /usr/bin/ , которая находится в вашем $PATH . Поведение этих двух отличается. Если вам нужна согласованность во всех конфигурациях, вы должны использовать программу /usr/bin/time вместо встроенного time bash.

1

Встроенный вывод time указывает, на что указывает stderr до того, как произойдет перенаправление.

Любая не встроенная команда, такая как /usr /bin /time, не может переопределить перенаправление, поскольку оно происходит до ее запуска, поэтому ее вывод отправляется в stderr.

1

Вы всегда только перенаправляете вывод своей команды. Поскольку время пишет в stderr, попробуйте следующее:

(time ls >> /stdout/output/of/ls 2>> /stderr/output/of/ls) 2>> /output/of/time

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .