Решение 1: Exec
Вы можете поместить команду exec в начале скрипта:
$ cat script1 #!/bin/bash exec > >(tee file.log) echo one echo two
Вот пример запуска script1:
$ bash script1 $ one two $
Обратите внимание, что приглашение оболочки вернулось до завершения вывода из сценария. Это связано с тем, что выходные данные отправлялись в подпроцесс и из-за капризов многозадачности выполнялись по собственному расписанию. По этой причине я предпочитаю второе решение, показанное ниже:
Решение 2: группировка
Вы можете поместить весь сценарий в группу оболочки {...}
, а затем перенаправить вывод из группы:
$ cat script2 #!/bin/bash { echo one echo two } | tee file.log
Это можно сделать для произвольно сложных скриптов. Просто положите {
в начале и } | tee file.log
в конце.
Примерный прогон выглядит так:
$ bash script2 one two $
Обратите внимание, что вывод аккуратно завершается до возвращения приглашения.