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ğı
5
A
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:
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
, 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
@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) –