Лучший способ сделать самотрассировку сценария удара?

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

#!/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...

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

8
задан Kevin Little 13 March 2010 в 20:40
поделиться

2 ответа

#!/bin/bash
exec >>log_file 2>&1

echo Hello world
date

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

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

13
ответ дан 5 December 2019 в 11:23
поделиться

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

2
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

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