2016-09-01 9 views

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).

+0

@ 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

+1

@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) –

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 
Powiązane problemy