Сохранить вывод терминала в текстовый файл

Для доставки мне посоветовали распечатать полный вывод моей программы в текстовый файл. Также мне нужно распечатать время выполнения, используя команду «время», которую я реализовал в моем сценарии выполнения.

#!/bin/bash
time ./blur-effect 4k.png 4k_out16.png 16 15 &>> Output.txt 

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

5
задан 30 April 2019 в 08:47

2 ответа

Это должно работать способ, которым Вы хотите при обертывании команды в оперативную группу штаба или подоболочку:

{ 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 в файле, почему круглые скобки необходимы?

13
ответ дан 30 April 2019 в 08:47

В 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
0
ответ дан 30 April 2019 в 08:47

Другие вопросы по тегам:

Похожие вопросы: