Наприклад, у мене простий файл bash
#!/bin/bash
cd ~/hello
ls
Як я можу змусити його відображати кожну команду перед її виконанням? Якраз протилежний ефект "@echo off" у пакетному сценарії Windows.
#!/bin/bash -x
Наприклад, у мене простий файл bash
#!/bin/bash
cd ~/hello
ls
Як я можу змусити його відображати кожну команду перед її виконанням? Якраз протилежний ефект "@echo off" у пакетному сценарії Windows.
#!/bin/bash -x
Відповіді:
bash -x script
або
set -x
у сценарії.
Ви можете знову скасувати опцію за допомогою set +x
. Якщо ви просто хочете зробити це для декількох команд, ви можете скористатись нижньою оболонкою: `(set -x; command1; command; ...;)
PS4
ви можете налаштувати підказку -x
. Напр .: PS4='Line $LINENO @ $(date +%s.%N): ' bash -x script
( date
хоча це сповільнить)
Вони також працюють:
set -v
або
#!/bin/bash -v
Але -v не друкує рядок PS4 перед кожним рядком сценарію, і він не відстежує кроки оператора "for" (наприклад) окремо. Це повторює коментарі, а -x - не.
Ось приклад виводу з використанням -v:
#!/bin/bash -v
# this is a comment
for i in {1..4}
do
echo -n $i
done
1234echo
echo hello
hello
Ось результат того самого сценарію з -x:
+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo
+ echo hello
hello
Зауважте, що я включив "echo -n", щоб додати наголос на відмінності між -v та -x. Крім того, -v те саме, що "-o багатослівний", але останній, здається, не працює як частина шебангу.
set -o xtrace
і set +o xtrace
є вашими друзями (він більш багатослівний, ніж -o verbose
, і вихід переходить до STDERR, на відміну від багатослівного, який, здається, увійшов до STDOUT).
Дивіться більше порад тут
іде як
language -x script
мова = python, perl, bash -x = сценарій оператора = ім'я файлу
сподіваюся, що це допомагає.
-x
не має нічого спільного з луною в Python
set
варіанти, ви можете знайти їх на цій довільній сторінці .