Для доставки мне посоветовали распечатать полный вывод моей программы в текстовый файл. Также мне нужно распечатать время выполнения, используя команду «время», которую я реализовал в моем сценарии выполнения.
#!/bin/bash
time ./blur-effect 4k.png 4k_out16.png 16 15 &>> Output.txt
Проблема, с которой я столкнулся, состоит в том, что вывод программы идет правильно в текстовый файл, но время выполнения отображается в терминале, но оно должно быть напечатано также в текстовом файле, заранее спасибо любой намек или помощь.
Это должно работать способ, которым Вы хотите при обертывании команды в оперативную группу штаба или подоболочку:
{ time ./blur-effect 4k.png 4k_out16.png 16 15 ; } &>> Output.txt
или
(time ./blur-effect 4k.png 4k_out16.png 16 15) &>> Output.txt
Посмотрите вывод Записи time
в файле, почему круглые скобки необходимы?
В Bash time
- это ключевое слово оболочки для конвейеров , которое интерпретирует перенаправление потока только по временной команде (конвейер); также это обычная служебная программа * nix:
$ type -a time
time is a shell keyword
time is /usr/bin/time
Если вы хотите перенаправить потоки в / из time
, вы можете использовать группы команд или вложенные оболочки, как описано в Steeldriver's. ответьте или вызовите служебную программу time(1)
явно:
/usr/bin/time COMMAND... &> LOGFILE
или если вы не уверены в полном пути time
time="$(which time)"
"$time" COMMAND... &> LOGFILE
< hr> PS: вы можете сохранить выходные данные команды time(1)
в файл, который не подключен к стандартному выводу ошибки команды (по умолчанию), на случай, если вы хотите сохранить стандартный вывод ошибок программы на время без изменений с опцией -o
. -a
заставляет time
добавлять к этому файлу вместо его перезаписи.
/usr/bin/time [-a] -o time.log COMMAND... >command-stdout.log 2>command-stderr.log
Для достижения того же эффекта с ключевым словом оболочки time
(как обычно, используйте >>
вместо перенаправления >
для добавления вместо перезаписи):
{ time COMMAND... >command-stdout.log 2>command-stderr.log; } 2>time.log
или чтобы сохранить журнал времени, но оставить стандартный вывод ошибок программы на время:
{ time COMMAND... 2>&3; } 3>&2 2>time.log