Лучший способ сделать самопроверку скрипта bash? - PullRequest
7 голосов
/ 13 марта 2010

У меня есть некоторые критические сценарии bash, которые вызываются кодом, который я не контролирую, и где я не вижу их вывод консоли. Я хочу получить полный след того, что эти сценарии сделали для последующего анализа. Для этого я хочу, чтобы каждый скрипт самостоятельно отслеживал. Вот что я сейчас делаю:

#!/bin/bash
# if last arg is not '_worker_', relaunch with stdout and stderr
# redirected to my log file...
if [[ "$BASH_ARGV" != "_worker_" ]]; then
    $0 "$@" _worker_ >>/some_log_file 2>&1  # add tee if console output wanted
    exit $?
fi
# rest of script follows...

Есть ли лучший, более чистый способ сделать это?

Ответы [ 3 ]

13 голосов
/ 14 марта 2010
#!/bin/bash
exec >>log_file 2>&1

echo Hello world
date

exec обладает магическим поведением в отношении перенаправлений: «Если команда не указана, любые перенаправления вступают в силу в текущей оболочке, а статус возврата равен 0. Если возникает ошибка перенаправления, возвращаемый статус - 1.

Кроме того, что касается вашего исходного решения, exec "$0" лучше, чем "$0"; exit $?, поскольку первое не оставляет дополнительного процесса оболочки, пока не завершится подпроцесс.

2 голосов
/ 13 марта 2010

может быть, вы ищете set -x?

0 голосов
/ 27 сентября 2013

вы можете проверить общую библиотеку трассировки с открытым исходным кодом с поддержкой bash.

Текущий доступный компонент предназначен для сценариев bash, скоро будут доступны Python и C ++ Дополнительные возможности: Ruby, Java, JavaScript, SQL, PowerShell, ...

Лицензия Apache-2.0

ЗКО Arno-Can Uestuensoez

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...