Próbuję sprawdzić w skrypcie, że jeśli ten skrypt jest wykonywany z flagą -x, która służy do debugowania dla skryptów powłoki. Czy jest jakiś sposób sprawdzenia, czy w samym skrypcie ustawiono -x? Chcę warunkowo to sprawdzić i zrobić coś, jeśli jest to ustawione.Czy istnieje sposób sprawdzenia, czy skrypt powłoki jest wykonywany z flagą -x
5
A
Odpowiedz
10
Zastosowanie:
if [[ $- == *x* ]]; then
echo "debug"
else
echo "not debug"
fi
Od Bash manual:
(. $ -, myślnik) Rozszerza bieżące flagi opcji, takie jakie zostały podane podczas wywołania, przez wbudowanego polecenia set lub ustawione przez samą powłokę (taką jak opcja -i).
2
przenośny sposób to zrobić (bez bashisms jak [[ ]]
) byłoby
case $- in
(*x*) echo "under set -x"
esac
2
Można pułapka sygnał Debug tak:
trap "do_this_if_it_is_being_debugged" DEBUG
function do_this_if_it_is_being_debugged() {
...
}
Uwaga ta musi być wykonana przed jest wykonywane
0
Lo ok dla xtrace
w $SHELLOPTS
.
Na przykład:
if grep -q xtrace <<<"$SHELLOPTS"; then
DO_SOMETHING;
fi
@ john-kugelman, usunięto cudzysłowie '$ -' mimo to może być puste. Czy można bezpiecznie założyć, że nawet jeśli '$ -' rozwija się do pustego łańcucha,' [['pozwoli na porównanie go za pomocą' == '? – ghoti
@ghoti '[' jest wbudowanym powłoką i '[[' jest słowem kluczowym powłoki, a dla tego ostatniego nie trzeba dodawać cudzysłowów. Używając pojedynczych nawiasów: '[musiałbyś dodać cytaty. Możesz sprawdzić więcej szczegółów [tutaj] (http://serverfault.com/questions/52034/what-is-the-difference-between-double-and-single-square-brackets-in-bash) –