Bir for döngüsünde AND (&&) öğesini nasıl değiştiririm?


24

Eşdeğerini bulmak istiyorum

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

ancak bir fordöngü içinde ifade edilen komutlarla

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

İlk ifadenin eşdeğerini bulmak için ikinci ifadede değişiklik yapmayı öneren şey nedir?

Yanıtlar:


54

Orijinal sıranıza eşdeğer:

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

Amit'in cevabındaki fark betiğin çıkmayacağı, yani diziyi / döngüyü takip edebilecek potansiyel komutları uygulayacağıdır. Tüm döngünün iade durumunun önerimle her zaman doğru olacağını unutmayın, bu durum sizin için uygunsa düzeltilebilir.


1
Kabul, bu daha yakından davranışını izlercmd && cmd
Amit Altın

9

Kirli bir satırlık çözüm istiyorsanız, bir komut oluşturabilir ve bunu bash'a gönderebilirsiniz.

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

3
bir IObashCC ^^ oluşturmalıyız
Olivier Dulac

8

Biri başarısız olursa döngüden ayrılabilirsin

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

1
jiliagre'nin dediği gibi (ve cevabında bir düzeltme sağladı), bu "döngüden kopmaz", çağıran kabuğundan çıkar.
Olivier Dulac

1
breakOrada yasal değil mi? if
İfadenin

0

Görevlerimi terminalde kullanmadan bu şekilde yürütüyorum &&

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

Benzer şekilde bu komutu bir betiğe koymak zorundasınız.

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

Her ikisi de bana aynı çıktıyı veriyor

google.com PING google.com (172.217.26.174) 56 (84) bayt veri. Google.com'dan 64 bayt (172.217.26.174): icmp_seq = 1 ttl = 56 zaman = 259 ms

--- google.com ping istatistikleri --- 1 paket iletildi, 1 alındı,% 0 paket kaybı, saat 0 ms / dk / avg / maks / mdev = 259.794 / 259.794 / 259.794 / 0.000 ms yahoo.com PING yahoo.com ( 98.138.253.109) 56 (84) bayt veri. Yahoo.com'dan 64 bayt (98.138.253.109): icmp_seq = 1 ttl = 51 saat = 398 ms

--- yahoo.com ping istatistikleri --- 1 paket iletildi, 1 alındı,% 0 paket kaybı, süre 0 ms rtt / dk / maks / maks / mdev = 398.974 / 398.974 / 398.974 / 0.000 ms

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.