Как я могу напечатать каждую команду перед выполнением?
Каков наилучший способ настроить скрипт Bash, который печатает каждую команду перед ее выполнением?
Это было бы здорово для отладки.
Я уже попробовал это:
CMD="./my-command --params >stdout.txt 2>stderr.txt"
echo $CMD
'$CMD'
Это должно было напечатать это первым:
./my-command --params >stdout.txt 2>stderr.txt
А затем выполните ./my-command --params
, с выводом, перенаправленным в указанные файлы.
Ответы
Ответ 1
set -o xtrace
или
bash -x myscript.sh
Это работает со стандартным /bin/sh, а также с IIRC (тогда это может быть POSIX)
И помните, что bashdb (bash Shell Debugger, release 4.0-0.4
)
Чтобы вернуться в нормальное состояние, выйдите из подоболочки или
set +o xtrace
Ответ 2
Самый простой способ сделать это - позволить bash
сделать это:
set -x
Или запустите его явно как bash -x myscript
.
Ответ 3
set -x
нормально, но если вы сделаете что-то вроде:
set -x;
command;
set +x;
это приведет к печати
+ command
+ set +x;
Вы можете использовать подоболочку, чтобы предотвратить это, например:
(set -x; command)
который просто напечатает команду.
Ответ 4
set -x
отлично.
Другой способ распечатать каждую выполненную команду - использовать trap
с DEBUG
.
Поместите эту строку в начало вашего script:
trap 'echo "# $BASH_COMMAND"' DEBUG
Здесь вы можете найти множество других trap
обычаев .