2016-09-01 29 views
5

ile yürütülüp yürütülmediğini kontrol etmenin bir yolu var. Komut dosyasında, bu komut dosyasının kabuk betikleri için hata ayıklaması için -x bayrağıyla çalıştırıldığını kontrol etmeye çalışıyorum. Kodun kendisinde -x ayarlandığını kontrol etmenin herhangi bir yolu var mı? Şartlı olarak bunu kontrol etmek ve ayarlanmışsa bir şeyler yapmak istiyorum.Kabuk betiğinin -x bayrağı

cevap

10

Kullanım:

if [[ $- == *x* ]]; then 
    echo "debug" 
else 
    echo "not debug" 
fi 

Bash manual Gönderen:

(. $ - Bir tire) çağrılması sırasında belirtilen seti yerleşik komutla, şimdiki seçenek bayrakları genişler veya bu seti kabuğun kendisi tarafından (-i seçeneği gibi).

trap "do_this_if_it_is_being_debugged" DEBUG 

function do_this_if_it_is_being_debugged() { 
... 
} 

Not buna ihtiyacı yürütülecek:

+0

, sen '$ -' tırnak içine alın kaldırıldı. $-'Boş bir dizgiye genişlediğinde bile, [[' '==' kullanılarak karşılaştırılmasına izin verileceğini varsaymak güvenli midir? – ghoti

+1

@ghoti '['shell builtin' ve [[' shell anahtar kelimedir ve ikincisi için tırnak eklemeniz gerekmez. Tek parantez kullanırken: '[' tırnak eklemek zorunda kalacaksınız. Daha fazla bilgiyi buradan kontrol edebilirsiniz. (Http://serverfault.com/questions/52034/what-is-the-difference-between-double-and-single-square-brackets-in-bash) –

2

([[ ]] gibi bashisms olmadan) bunu yapmanın taşınabilir yolu

case $- in 
(*x*) echo "under set -x" 
esac 
2

Sen tuzak şöyle DEBUG sinyali olabilir olurdu'dan önce (set -x) yayınlanmaktadır.

0

Lo $SHELLOPTS içinde xtrace için tamam. Örneğin

: o boş olsa bile john-kugelman @

if grep -q xtrace <<<"$SHELLOPTS"; then 
    DO_SOMETHING; 
fi