Как перенаправить как stdout, так и stderr в файл из скрипта bash? - PullRequest
1 голос
/ 08 апреля 2020

Я хочу добавить команду к моему скрипту bash, которая направляет все stderr и stdout к указанным c файлам. Из this и многих других источников я знаю, что из командной строки я бы использовал:

/path/to/script.sh >> log_file 2>> err_file

Однако я хочу что-то внутри моего скрипта, что-то похожее на эти флаги slurm:

#!/bin/bash
#SBATCH -o slurm.stdout.txt # Standard output log
#SBATCH -e slurm.stderr.txt # Standard error log

<code>

Есть ли способ прямого вывода из скрипта или мне нужно использовать >> log_file 2>> err_file каждый раз, когда я вызываю скрипт? Спасибо

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Вы можете использовать это:

exec >> file
exec 2>&1

в начале вашего bash сценария. Это добавит и stdout, и stderr к вашему файлу.

0 голосов
/ 08 апреля 2020

Вы можете использовать это в начале скрипта bash:

# Redirected Output
exec > log_file 2> err_file

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

# Appending Redirected Output
exec >> log_file 2>> err_file

Если вы хотите перенаправить как stdout, так и stderr в один и тот же файл, тогда вы можете использовать:

# Redirected Output
exec &> log_file
# This is semantically equivalent to
exec > log_file 2>&1

Если вы предпочитаете добавить, используйте это:

# Appending Redirected Output
exec >> log_file 2>&1
...