बैश: कमांड 1 रन न होने पर कमांड 2


43

मैं कुछ इस तरह करना चाहता हूं:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

मैं इसे कैसे करूं?


1
आप "गूंज सफलता" कमांड से पहले "तब" कीवर्ड को याद कर रहे हैं।
ग्लेन जैकमैन

10
हममम; आपका
छद्मकोड

कुछ शेल स्क्रिप्टिंग से बाहर निकलने की स्थिति के लिए अच्छा संसाधन pixelbeat.org/programming/shell_script_mistakes.html
Flashman

जवाबों:


71

आपको वही करना चाहिए जो आपको चाहिए:

cmd1 && cmd2 && echo success || echo epic fail

या

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi

3
यह काम करता है, लेकिन मैं उलझन में हूं कि ||पहले echoकमांड के आउटपुट को क्यों नहीं देखता ।
mlissner

1
@mlissner, यदि अन्य को कोड्स से बाहर निकलने की उम्मीद है, तो 0 यदि कमांड जहां लॉन्च किया गया है और 1 जहां गलतियां हैं। आउटपुट पर न पढ़ें। Just try whoami && whoami && echo success || echo epic failऔर अब whoami && whoareyou && echo success || echo epic fail। मैं यह नहीं समझ सकता कि आपके द्वारा "पहली प्रतिध्वनी कमांड के आउटपुट को नहीं दिखता है"
erm3nda

@mlissner मुझे लगता है कि मुझे आपका प्रश्न मिल गया है, लेकिन इसका उत्तर यह है कि गूंज कमांड कभी भी विफल नहीं होगी। अर्थात इसका प्रतिफल 0 होगा, अर्थात सत्य। तो जो हालत वास्तव में मायने रखती है वह हैcmd1 && cmd2
काज़िम ज़ैदी

22

पेट्र उज़ेल हाजिर है, लेकिन आप जादू $ के साथ भी खेल सकते हैं।

$? निष्पादित अंतिम कमांड से निकास कोड रखता है, और यदि आप इसका उपयोग करते हैं तो आप अपनी स्क्रिप्ट को काफी लचीला लिख ​​सकते हैं।

यह प्रश्न इस विषय को थोड़ा सा छूता है, $ का उपयोग करने के लिए सर्वश्रेष्ठ अभ्यास? बाश में?

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

फिर आप अलग-अलग निकास कोड पर भी प्रतिक्रिया कर सकते हैं और यदि आप चाहें तो अलग-अलग चीजें कर सकते हैं।


1
मेरी कंपनी, PHP एक्सपर्ट्स, इंक। और खुद हमारी आंतरिक CI स्क्रिप्ट के अभिन्न अंग होने के लिए धन्यवाद देना चाहते हैं। धन्यवाद!
थियोडोर आर। स्मिथ

7

प्रश्न में छद्म कोड प्रश्न के शीर्षक के अनुरूप नहीं है।

अगर किसी को वास्तव में यह जानने की आवश्यकता है कि कमांड 2 कैसे चलता है यदि कमांड 1 विफल रहता है, तो यह एक सरल स्पष्टीकरण है:

  • cmd1 || cmd2: यह चलेगा cmd1, और विफलता के मामले में यह चलेगाcmd2
  • cmd1 && cmd2: यह चलेगा cmd1, और सफलता के मामले में यह चलेगाcmd2
  • cmd1 ; cmd2: यह चलेगा cmd1, और फिर यह चलेगा cmd2, दौड़ने की विफलता या सफलता से स्वतंत्र होगा cmd1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.