बैश स्क्रिप्ट में ड्राई-रन को लागू करना


15

बैश स्क्रिप्ट में कोई ड्राई-रन विकल्प कैसे लागू करेगा?

मैं या तो हर एक कमांड को एक में लपेटने के बारे में सोच सकता हूं और अगर स्क्रिप्ट ड्राई-रन के साथ चल रही है तो इसे चलाने के बजाय कमांड को गूंज सकता है।

एक अन्य तरीका एक फ़ंक्शन को परिभाषित करना और फिर उस फ़ंक्शन के माध्यम से प्रत्येक कमांड कॉल को पारित करना होगा।

कुछ इस तरह:

function _run () {
    if [[ "$DRY_RUN" ]]; then
        echo $@
    else
        $@
    fi
}

`_run mv /tmp/file /tmp/file2`

`DRY_RUN=true _run mv /tmp/file /tmp/file2`

क्या यह सिर्फ गलत है और इसे करने का एक बेहतर तरीका है?


तो, आप प्रिंट करना चाहते हैं कि कमांड वास्तव में कमांड को निष्पादित किए बिना ($ VARIABLES के मूल्यों सहित) क्या करेगा। मैं _run()कभी-कभी 'सेट -xv' के साथ आपके फ़ंक्शन का उपयोग करता हूं, लेकिन मैं एक बेहतर तरीका पसंद करूंगा।
स्टेफन लासवर्स्की

हाँ, बिलकुल। मैं सोच रहा था कि अगर कोई आंतरिक वैरिएबल नहीं है जिसे आप bash में सेट कर सकते हैं तो कमांड वास्तव में निष्पादित नहीं करते हैं, बजाय उन्हें एक फ़ंक्शन के माध्यम से पारित करने के लिए
आंद्रेई सेर्डेलियुक

2
कोई कारण नहीं है कि इस प्रश्न को समुदाय विकि के रूप में चिह्नित किया जाना चाहिए था।
अगली सूचना तक रोक दिया गया।

बैश एक खोल है। सूखा रन बनाने का कोई कारण नहीं है। मुझे नहीं लगता कि ऐसा करने का एक बेहतर तरीका आपके द्वारा पहले से किया गया है।
d -_- b

जवाबों:


2

BashFAQ / 050 देखें : मैं एक चर में एक कमांड डालने की कोशिश कर रहा हूं, लेकिन जटिल मामले हमेशा विफल होते हैं! इस विषय की चर्चा के लिए।

हालाँकि अब हटा दिया गया है, फिर भी प्रोग्राम में परीक्षण क्षमता कैसे जोड़ें , यह अनुभाग अभी भी उपयोगी हो सकता है।


एक विकल्प नहीं है, लेकिन यह परीक्षण और लंबे बैश कार्यक्रमों के साथ काम करने के लिए एक उत्कृष्ट संसाधन जैसा दिखता है।
आंद्रेई सेर्डेलियुक

मैंने संपादित किए गए रोल को वापस ले लिया, जो मेरे उत्तर के बिंदु से लिंक किए गए पृष्ठ के एक विशेष भाग में एक एंकर को जोड़ दिया, जैसा कि कहा गया है, चर्चा को एक विशिष्ट कैसे-टू-पार्ट की बजाय पूरे के रूप में चर्चा को पढ़ना है। लिंक किए गए पृष्ठ का बिंदु आम तौर पर चर में निष्पादित करने के लिए कमांड डालने से बचने की कोशिश करने के लिए होता है क्योंकि बहुत सारे गोचर होते हैं।
अगली सूचना तक रोक दिया गया।

यह अधिक उपयोगी होगा यदि यह उत्तर इस लेख के मुख्य बिंदुओं को संक्षेप में प्रस्तुत करे। एक पंक्ति के उत्तर अभी भी खराब उत्तर हैं।
मार्क बूथ

4

मैं @ डेनिस विलियमसन के जवाब से खेलना चाहता था। यहाँ मुझे क्या मिला है:

Run () {
    if [ "$TEST" ]; then
        echo "$*"
        return 0
    fi

    eval "$@"
}

eval "$@"यहां महत्वपूर्ण है, और बेहतर तो बस कर रही है $*$@सभी मापदंडों को $*लौटाता है और बिना व्हाट्सएप / उद्धरण के सभी मापदंडों को लौटाता है।

$ mkdir dir
$ touch dir/file1 dir/file2
$ FOO="dir/*"
$ TEST=true Run ls -l $FOO
ls -l dir/file1 dir/file2
$ Run ls -l $FOO
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file1
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.