`सेट -x` क्या करता है?


259

मेरे पास निम्नलिखित पंक्ति के साथ एक शेल स्क्रिप्ट है:

[ "$DEBUG" == 'true' ] && set -x

15
एक नज़र डालें:help -m set | less
साइरस

4
help -m setटिप के लिए धन्यवाद । यह काम करता है। मैंने man setपूछने से पहले कोशिश की , हालांकि उबंटू पर हैNo manual entry for set
ओले

2
@ ठीक है, setइसलिए इसे बैश में बनाया गया है , यदि आप man bashइसे शेल बिल्डिंग कमेंट्स सेक्शन में पा सकते हैं। जब मनुष्य पृष्ठ को देखने आप शायद इस regexp को खोजते हुए इससे के लिए कूद कर सकते हैं: \bset \[
User5910

जवाबों:


364

set -xशेल के एक मोड को सक्षम करता है जहां सभी निष्पादित कमांड टर्मिनल पर प्रिंट होते हैं। आपके मामले में यह डिबगिंग के लिए स्पष्ट रूप से उपयोग किया जाता है, जो इसके लिए एक विशिष्ट उपयोग का मामला है set -x: प्रत्येक कमांड को प्रिंट करना जैसा कि इसे निष्पादित किया गया है, आपको स्क्रिप्ट के नियंत्रण प्रवाह की कल्पना करने में मदद कर सकता है यदि यह अपेक्षा के अनुरूप काम नहीं कर रहा है।

set +x इसे निष्क्रिय कर देता है।


5
उस सुविधा को फिर से कैसे अक्षम करें?
फीड करें

85
@ डैनियलब्रनर: set +xइसे निष्क्रिय कर देता है।
जॉन Zwinck

2
यह बहुत उपयोगी है! काश किसी ने मुझसे पहले कहा होता। क्या इस तरह की अन्य दिलचस्प तरकीबें हैं जो स्क्रिप्टिंग पर हमारे मेटा-कौशल को बढ़ावा दे सकती हैं?
छात्र

7
@Student: set -eआपकी स्क्रिप्ट के शीर्ष पर जब भी कोई त्रुटि होती है (और स्पष्ट रूप से नियंत्रित नहीं होती है) स्क्रिप्ट को त्रुटि से बाहर निकाल देगा। मुझे लगता है कि डिफ़ॉल्ट रूप से काफी बेहतर है, जो कि विली-निली (जैसे विज़ुअल बेसिक के बदनाम On Error Resume Next) को जारी रखना है ।
जॉन ज़्वानक

1
@JohnZwinck, दुर्भाग्य से, set -eहै बहुत अवांछनीय दुष्प्रभाव, मुद्दा यह है कि यह कोड की समीक्षा लगभग असंभव बना देता है (क्योंकि किसी दिए गए लाइन के व्यवहार क्या कॉल स्टैक हो रहा है पर निर्भर करता है के लिए - में एक संदर्भ "जाँच" एक समारोह में कहा जाता है कि अगर, set -eअक्षम किया गया है कि मंगलाचरण और बदले में यह सब कुछ कहता है)। BashFAQ # 105 में अभ्यास देखें ।
चार्ल्स डफी

77

set -x

कमांड, केस कमांड, सिलेक्ट कमांड्स के लिए सिंपल कमांड्स का एक ट्रेस प्रिंट करता है, और कमांड्स के लिए अंकगणित और उनके तर्कों या संबंधित शब्द सूचियों का विस्तार होने के बाद और उनके निष्पादित होने से पहले। PS4 चर के मूल्य का विस्तार किया जाता है और परिणामी मूल्य को कमांड और उसके विस्तारित तर्कों से पहले प्रिंट किया जाता है।

[ स्रोत ]

उदाहरण

set -x
echo `expr 10 + 20 `
+ expr 10 + 20
+ echo 30
30

set +x
echo `expr 10 + 20 `
30

उपरोक्त उदाहरण के उपयोग को दर्शाता है set -x। जब इसका उपयोग किया जाता है, तो उपरोक्त अंकगणितीय अभिव्यक्ति का विस्तार किया गया है। हम देख सकते हैं कि कैसे एक सिंग लाइन का मूल्यांकन चरण दर चरण किया गया है।

  • पहले चरण exprका मूल्यांकन किया गया है।
  • दूसरे चरण echoका मूल्यांकन किया गया है।

सेट के बारे में अधिक जानने के लिए → इस लिंक पर जाएँ

जब यह आपके शेल स्क्रिप्ट की बात आती है,

[ "$DEBUG" == 'true' ] && set -x

जब निष्पादन मोड के रूप में चयनित किया जाता है तो आपकी स्क्रिप्ट जानकारी की कुछ अतिरिक्त पंक्तियों को प्रिंट कर रही होती है DEBUG। परंपरागत रूप से लोग डिबग मोड को सक्षम करते थे, जब कोई स्क्रिप्ट वैकल्पिक तर्क जैसे कहलाती है-d



6

-u: डिफ़ॉल्ट रूप से अक्षम। सक्रिय होने पर, एक अप्रमाणित चर का उपयोग करते समय एक त्रुटि संदेश प्रदर्शित होता है।

-v: डिफ़ॉल्ट रूप से निष्क्रिय। सक्रियण के बाद, सूचना के मूल सामग्री को आउटपुट के पहले (चर संकल्प के बिना) प्रदर्शित किया जाएगा।

-x: डिफ़ॉल्ट रूप से निष्क्रिय। यदि सक्रिय किया जाता है, तो कमांड चलाने से पहले कमांड सामग्री प्रदर्शित की जाएगी (चर रिज़ॉल्यूशन के बाद, ++ प्रतीक है)।

निम्नलिखित अंतरों की तुलना करें:

/ # set -v && echo $HOME
/root
/ # set +v && echo $HOME
set +v && echo $HOME
/root

/ # set -x && echo $HOME
+ echo /root
/root
/ # set +x && echo $HOME
+ set +x
/root

/ # set -u && echo $NOSET
/bin/sh: NOSET: parameter not set
/ # set +u && echo $NOSET
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.