Не удалось перенаправить stdout / stderr в файл журнала

У меня есть сценарий tmp.sh

 #!/bin/bash echo hello sleep 3 echo 3 

Я хочу записать время выполнения скрипта (а также скрипт stdout) в файл журнала.

 user$ time ./tmp.sh >& log.tmp real 0m3.003s user 0m0.000s sys 0m0.003s 

не работает.

 user$ time ./tmp.sh 2>&1 log.tmp hello 3 real 0m3.003s user 0m0.002s sys 0m0.001s 

это также не работает.

Каков правильный способ регистрации вывода команды time в файл журнала?

time в bash отображает информацию о времени на STDERR после команды после нее (фактическая). Поэтому, если вы не сгруппировали их и не передали STDERR группы в файл, только STANDR команды фактической команды будет перенаправлен в файл, и файл будет закрыт, когда команда вернется (до time покажет свою информацию).

Вы можете использовать группировку команд, перенаправляя STDOUT и STDERR:

 { time ./tmp.sh ;} &>log.tmp 

Или запустите в подоболочке:

 ( time ./tmp.sh ) &>log.tmp 

Пример:

 $ { time sleep 1 ;} 2>time.log $ cat time.log real 0m1.001s user 0m0.000s sys 0m0.000s $ ( time sleep 1 ) 2>time.log $ cat time.log real 0m1.001s user 0m0.000s sys 0m0.000s