मारपीट करने से पहले हर स्क्रिप्ट का प्रिंट आउट कैसे करें?


88

उदाहरण के लिए, मेरे पास एक साधारण बैश फाइल है

#!/bin/bash
cd ~/hello
ls

मैं इसे निष्पादित करने से पहले हर कमांड को कैसे प्रदर्शित कर सकता हूं? विंडोज़ बैच स्क्रिप्टिंग में "@ टेको ऑफ" का विपरीत प्रभाव।


1
उन setविकल्पों की तलाश करने वालों के लिए , आप उन्हें इस मैन पेज पर पा सकते हैं ।
mkobit

आप बस #!/bin/bash -x
शेबंग को

जवाबों:


110
bash -x script

या

set -x

स्क्रिप्ट में।

आप विकल्प को फिर से परेशान कर सकते हैं set +x। यदि आप इसे कुछ आदेशों के लिए करना चाहते हैं, तो आप एक उप-भाग का उपयोग कर सकते हैं: `(सेट -x; कमांड 1; कमांड; ...;);


मैंने हमेशा इसका बहुत प्रभाव डाला है। आउटपुट आपको पहले की अपेक्षा थोड़ा छोटा दिखाई देता है।
स्कॉट पैक

2
सेट करके PS4आप प्रॉम्प्ट को ट्विक कर सकते हैं -x। जैसे: PS4='Line $LINENO @ $(date +%s.%N): ' bash -x script( dateइसे धीमा कर देंगे, हालांकि)
वाल्टर ट्रॉस

23

ये भी काम करते हैं:

set -v

या

#!/bin/bash -v

लेकिन -v प्रत्येक स्क्रिप्ट लाइन से पहले PS4 स्ट्रिंग को प्रिंट नहीं करता है और यह व्यक्तिगत रूप से "उदाहरण के लिए" कथन (उदाहरण के लिए) के चरणों का पता नहीं लगाता है। यह इको कमेंट्स करता है जबकि -x नहीं करता है।

यहाँ -v का उपयोग करके आउटपुट का एक उदाहरण दिया गया है:

#!/bin/bash -v
# this is a comment
for i in {1..4}
do
    echo -n $i
done
1234echo

echo hello
hello

यहाँ -x के साथ एक ही स्क्रिप्ट का परिणाम है:

+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo

+ echo hello
hello

ध्यान दें कि मैंने "इको-एन" को शामिल किया है -v और -x के बीच के अंतर पर जोर देने के लिए। इसके अलावा, -v "-o वर्बोज़" के समान है, लेकिन बाद वाला लगता है कि वह एक शबंग के हिस्से के रूप में काम नहीं करता है।


महान व्याख्या! कोई शोध किए बिना, यह मुझे ऐसा लगता है जैसे Verbose और eXplicit वही हैं जो उन दो अक्षरों के लिए खड़े हैं।
एप-इनैगो

मुझे लगता है कि -x eXecute के करीब है।
स्टीवन पार्क्स 15

10

यह भी काम करना चाहिए:

#!/bin/bash -x
cd ~/hello
ls

6

यह काम करना चाहिए:

set -o verbose #echo on
...
set +o verbose #echo off

4

set -o xtraceऔर set +o xtraceआपके दोस्त हैं (यह क्रिया से अधिक क्रिया है, की तुलना में -o verbose, और आउटपुट STDERR को जाता है, क्रिया के विपरीत, जो STDOUT में लॉग इन लगता है)।

यहाँ और टिप्स देखें


3

कुछ तरीके हैं।

#!/usr/bin/env bash -x

शेबंग लाइन के रूप में।

सहित set -xस्क्रिप्ट अपने आप में कार्यक्षमता, जबकि सक्षम हो जाएगा set +xभी अक्षम हो जाएगा। ये दोनों तरीके अधिक पोर्टेबल श शेल के साथ भी काम करेंगे।

अगर मुझे सही ढंग से याद है, तो भी -x विकल्प है।


1

जैसे जाता है

language -x script

भाषा = पायथन, पर्ल, बैश -x = ऑपरेटर स्क्रिप्ट = फ़ाइल नाम

आशा है ये मदद करेगा।


3
-xपाइथन में गूँजने के साथ कुछ भी नहीं है
यूजीन पैंकोव

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.