Подтвердить что ты не робот

Перенаправить весь вывод в bash script при использовании set -x

У меня есть bash script, у которого set -x. Можно ли перенаправить отладочные отпечатки этого script и всех его результатов в файл? В идеале я хотел бы сделать что-то вроде этого:

#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"

и получим

+ echo test
test

вывод в /tmp/mylog, а не в stdout.

4b9b3361

Ответ 1

Это то, что я только что искал в googled, и я помню, как я использовал это некоторое время назад...

Используйте exec для перенаправления как стандартного вывода, так и стандартной ошибки всех команд в скрипте:

#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1

Для получения дополнительной магии перенаправления проверьте Advanced Bash Scripting Guide - Перенаправление ввода-вывода.

Если вы также хотите видеть вывод и отладку на терминале в дополнение к файлу журнала, см. Переадресацию COPY stdout в файл журнала из самого скрипта bash.

Если вы хотите обрабатывать назначение трассировки трассировки set -x независимо от обычных STDOUT и STDERR, см. Bash, чтобы сохранить вывод набора -x в файл журнала.

Ответ 2

вывод -x выводится на stderr, поэтому для его регистрации выполните:

set -x
exec 2>/tmp/mylog

Ответ 3

Чтобы перенаправить stderr и stdout:

exec &>> $LOG_FILE_NAME

Если вы хотите добавить в файл. Чтобы перезаписать файл:

exec &> $LOG_FILE_NAME

Ответ 4

В моем случае сценарий вызывался несколько раз из других мест, и я не видел всего, поэтому вместо этого я сделал добавление, и это сработало:

exec 1>>FILENAME 2>&1
set -x

Чтобы избежать путаницы, обязательно удаляйте FILENAME перед каждым запуском.