लिनक्स के लिए "इको ऑन" के बराबर?


27

मैं bash स्क्रिप्ट में चलने वाली सभी कमांड्स को कैसे रोक सकता हूं?

यह आउटपुट में कमांड आउटपुट होना चाहिए और खुद को कमांड देना चाहिए।

मुझे मिला

#!/bin/bash -x

लेकिन यह बिल्कुल वैसा ही नहीं है क्योंकि इसके बजाय

 mysql -v dbname < dump.sql | grep "CREATE TABLE"

यह दिखाता है

+ mysql -v dbname
+ grep 'CREATE TABLE'

जवाबों:


29

का उपयोग करें bash -v

यह स्क्रिप्ट है:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'

echo "Done."

यह आउटपुट है:

#!/bin/bash -v

echo "Hello, World" | sed 's|Hello|Goodbye|'
Goodbye, World

echo "Done."
Done.

दुर्भाग्य से, PS4मुद्रण विस्तारित कमांड के लिए कोई विशेष मार्कर नहीं है । आप जल्दी से आदेशों की पहचान करने के लिए दोनों को जोड़ सकते हैं:

#!/bin/bash -vx

echo "Hello, World" | sed 's|Hello|Goodbye|'
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World

echo "Done."
+ echo Done.
Done.

12

set -x यह करने का दूसरा तरीका है।

$ cat a.sh
#!/bin/bash

set -x
echo "Hello, World" | sed 's|Hello|Goodbye|'
echo "Done."

आउटपुट होगा:

sh a.sh
+ echo 'Hello, World'
+ sed 's|Hello|Goodbye|'
Goodbye, World
+ echo Done.
Done.

1
कौन क्या ओपी अपने प्रश्न में बेकार सही है ... के रूप में खारिज की तरह है
डैनियल बेक

@ अशोक क्या आप समझा सकते हैं? : मैं अंतर नहीं देख सकते हैं यहां पुनश्च: जीएनयू बैश, संस्करण 4.1.5 (1) -release (i486-पीसी-linux-gnu) Ubuntu 10.04.3
Putnik

1
@Putnik यह वही मूल बात है, लेकिन आप set -xस्क्रिप्ट में कहीं भी हो सकते हैं , और इसे फिर से निष्क्रिय भी कर सकते हैं। इसलिए यदि आप इसे केवल echo "Done"रेखा पर चाहते हैं , तो set -xउस एक के ठीक पहले रखें।
डैनियल बेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.