2013-05-17 5 views
14

जब जटिल बैश स्क्रिप्ट बनाने, मैं अक्सर आदेश का उपयोग होगा।आप डीबगिंग को सक्षम करने के लिए -x सेट कर सकते हैं, क्या यह जानने का कोई तरीका है कि क्या यह स्क्रिप्ट के भीतर से सेट किया गया है या नहीं? मुझे अगर यह व्यवहार नहीं कर रहा स्क्रिप्ट डिबग करने के लिए सक्षम करने के लिए</p> <p>सेट -x</p> <p>:

हालांकि मैं कुछ यूआई कार्यों कि डिबग मोड में कचरे के एक बहुत उत्पन्न किया है, इसलिए मैं की तर्ज पर एक सशर्त में उन्हें रैप करने के लिए करना चाहते हैं:

ui~title(){ 
    DEBUG_MODE=0 
    if [ set -x is enabled ] # this is the bit I don't know how to do 
    then 
     # disable debugging mode for this function as it is not required and generates a lot of noise 
     set +x 
     DEBUG_MODE=1 
    fi 

    # my UI code goes here 

    if [ "1" == "$DEBUG_MODE" ] 
    then 
     # re enable debugging mode here 
     set -x 
    fi 
} 
समस्या

कि मैं नहीं कर सकता है यह पता लगाना कि डीबग मोड सक्षम है या नहीं।

मुझे लगता है कि यह संभव है, मैं बस खोज के बावजूद इसे ढूंढ नहीं पाया। कोई सुझाव

+0

दो महान जवाब, चियर्स! – edmondscommerce

उत्तर

23

उपयोग के लिए पहले से

धन्यवाद निम्नलिखित:

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

3.2.5. Special parameters से:

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

+4

+1 के लिए धन्यवाद। यह स्पष्ट करने के लिए अच्छा हो सकता है कि वास्तव में "$ -" क्या है –

9
$ [ -o xtrace ] ; echo $? 
1 
$ set -x 
++ ... 
$ [ -o xtrace ] ; echo $? 
+ '[' -o xtrace ']' 
+ echo 0 
0 
+0

सटीक उत्तर –

1
बस पूर्णता के लिए के लिए

, यहाँ दो फिर से प्रयोग करने योग्य कार्य हैं:

is_shell_attribute_set() { # attribute, like "x" 
    case "$-" in 
    *"$1"*) return 0 ;; 
    *) return 1 ;; 
    esac 
} 


is_shell_option_set() { # option, like "pipefail" 
    case "$(set -o | grep "$1")" in 
    *on) return 0 ;; 
    *) return 1 ;; 
    esac 
} 

प्रयोग उदाहरण:

set -x 
if is_shell_attribute_set e; then echo "yes"; else echo "no"; fi # yes 

set +x 
if is_shell_attribute_set e; then echo "yes"; else echo "no"; fi # no 

set -o pipefail 
if is_shell_option_set pipefail; then echo "yes"; else echo "no"; fi # no 

set +o pipefail 
if is_shell_option_set pipefail; then echo "yes"; else echo "no"; fi # no 
संबंधित मुद्दे

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