मैं लूप के लिए AND (&&) को कैसे प्रतिस्थापित करूं?


24

मैं इसके बराबर खोजना चाहता हूं

cmd 1 && cmd 2 && ... && cmd 20

लेकिन forजैसे लूप के भीतर व्यक्त आदेशों के साथ

for i in {1..20}
do
   cmd $i
done

पहले के बराबर को खोजने के लिए आप दूसरी अभिव्यक्ति में बदलाव के लिए क्या सुझाव देंगे?

जवाबों:


54

आपके मूल अनुक्रम के बराबर होगा:

for i in {1..20}
do
   cmd $i || break
done

अमित के जवाब के साथ अंतर यह है कि स्क्रिप्ट बाहर नहीं निकलेगी, यानी संभावित कमांड निष्पादित करेगी जो अनुक्रम / लूप का पालन कर सकती है। ध्यान दें कि पूरे लूप की वापसी की स्थिति हमेशा मेरे सुझाव के साथ सही होगी, यह आपके मामले में प्रासंगिक होने पर तय किया जा सकता है।


1
सहमत, यह और अधिक निकटता से व्यवहार करता हैcmd && cmd
अमित गोल्ड

9

यदि आप एक गंदा एक-लाइन समाधान चाहते हैं, तो आप एक कमांड बना सकते हैं और इसे बैश करने के लिए भेज सकते हैं।

echo "cmd "{1..20}" &&" : | bash

3
हमें
ओलिवियर

8

यदि आप उनमें से एक में विफल रहे तो आप लूप से बाहर निकल सकते हैं

for i in {1..55}; do
    if ! cmd $i; then
        exit 1
    fi
done

1
जैसे @jiliagre ने उल्लेख किया (और उनके उत्तर में एक सुधार प्रदान किया), यह "लूप से बाहर नहीं" होता है, यह कॉलिंग शेल से बाहर निकलता है।
ओलिवियर दुलक

1
नहीं है breakवहाँ कानूनी? मुझे पूरा यकीन है कि ifबयान में हस्तक्षेप नहीं होगा ..
jpaugh

0

इस तरह से मैं बिना उपयोग किए टर्मिनल में अपने कार्यों को निष्पादित करता हूं &&

 for i in google.com yahoo.com;do ping -c1 $i;echo $i;done

इसी तरह आपको इस कमांड को स्क्रिप्ट में रखना है

 for i in google.com yahoo.com
    do echo $i;ping -c1 $i;
  done

दोनों मुझे एक ही आउटपुट दे रहे हैं

google.com पिंग google.com (172.217.26.174) 56 (84) बाइट्स डेटा। Google.com से 64 बाइट्स (172.217.26.174): icmp_seq = 1 ttl = 56 समय = 259 एमएस

--- google.com पिंग आँकड़े --- 1 पैकेट प्रेषित, 1 प्राप्त, 0% पैकेट नुकसान, समय 0ms आरटी मिनट / एवीजी / अधिकतम / mdev = 259.794 / 259.794 / 259.794 / 0.000 एमएस yahoo.com पिंग yahoo.com ( 98.138.253.109) 56 (84) डेटा का बाइट्स। Yahoo.com से 64 बाइट्स (98.138.253.109): icmp_seq = 1 ttl = 51 समय = 398 मि।

--- yahoo.com पिंग के आँकड़े --- 1 पैकेट प्रेषित, 1 प्राप्त, 0% पैकेट हानि, समय 0ms आरटी मिनट / एवीजी / अधिकतम / महादेव = 398.974 / 398.974 / 398.974 / 0.000 एमएस

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