Как я могу перенаправить вывод команды "время"?

Я попытался перенаправить вывод команды времени, но не смог:

$time ls > filename
real    0m0.000s
user    0m0.000s
sys     0m0.000s

В файле я вижу вывод команды ls, а не time. Пожалуйста, объясните, почему я не мог и как это сделать.

Ответы

Ответ 1

вы можете перенаправить вывод времени с помощью

(time ls) &> file

Потому что вам нужно взять (время ls) как одну команду, чтобы вы могли использовать фигурные скобки.

Ответ 2

нет необходимости запускать подклассу. Используйте блок кода также.

{ time ls; } 2> out.txt

или

{ time ls > /dev/null 2>&1 ; } 2> out.txt

Ответ 3

Время команды отправляет его на STDERR (вместо STDOUT). Это потому, что команда, выполняемая со временем обычно (в этом случае ls) выводит на STDOUT.

Если вы хотите записать вывод времени, введите:

(time ls) 2> filename

Это фиксирует только выход времени, но вывод ls идет в нормальное состояние на консоль. Если вы хотите записать оба в одном файле, введите:

(time ls) &> filename

2 > перенаправляет STDERR, & > перенаправляет оба.

Ответ 4

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

Ответ 5

Если вы не хотите смешивать вывод из time и команды. С GNU-временем вы можете использовать -o file как:

/usr/bin/time -o tim grep -e k /tmp 1>out 2>err

while tim выводится время, out и err являются stdout и stderr из grep.