2016-09-01 6 views
5

के साथ निष्पादित किया गया है, मैं स्क्रिप्ट में जांच करने की कोशिश कर रहा हूं, कि यदि उस स्क्रिप्ट को -x ध्वज के साथ निष्पादित किया गया है जो शैल स्क्रिप्ट के लिए डिबगिंग के लिए है। क्या स्क्रिप्ट में यह जांचने का कोई तरीका है कि -x सेट है। मैं सशर्त रूप से जांचना चाहता हूं और सेट होने पर कुछ करता हूं।क्या यह जांचने का कोई तरीका है कि शेल स्क्रिप्ट को -x ध्वज

उत्तर

10

उपयोग:

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

से Bash manual:

(। $ -, एक हाइफन) के रूप में मंगलाचरण पर निर्दिष्ट वर्तमान विकल्प झंडे तक विस्तृत होता, सेट builtin आदेश द्वारा, या उन सेट खोल के द्वारा (जैसे -i विकल्प)।

+0

@ जॉन-kugelman, आप के आसपास '$ -' उद्धरण हटाया भले ही यह खाली हो सकता है। क्या यह मानना ​​सुरक्षित है कि भले ही '$ -' एक खाली स्ट्रिंग में फैलता है, '[['' '= 'का उपयोग करके इसकी तुलना करने की अनुमति होगी? – ghoti

+1

@ghoti '[' शैल बिल्टिन है और '[[' शैल कीवर्ड है और बाद में आपको उद्धरण जोड़ने की आवश्यकता नहीं है। एकल ब्रैकेट का उपयोग करते समय: '[' आपको उद्धरण जोड़ना होगा। आप अधिक जानकारी यहां देख सकते हैं [यहां] (http://serverfault.com/questions/52034/what-is-the-difference-between-double-and-single-square-brackets-in-bash) –

2

([[ ]] तरह bashisms के बिना) यह करने के लिए पोर्टेबल तरीका होगा

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

आप जाल इतना की तरह डीबग संकेत, कर सकते हैं:

trap "do_this_if_it_is_being_debugged" DEBUG 

function do_this_if_it_is_being_debugged() { 
... 
} 

नोट इस की जरूरत है निष्पादित किया जाना है set -x को

0

लो से निष्पादित किया जा रहा है $SHELLOPTS में ठीक है।

उदाहरण के लिए:

if grep -q xtrace <<<"$SHELLOPTS"; then 
    DO_SOMETHING; 
fi 
संबंधित मुद्दे

 संबंधित मुद्दे