Eşdeğerini bulmak istiyorum
cmd 1 && cmd 2 && ... && cmd 20
ancak bir for
dö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?
Eşdeğerini bulmak istiyorum
cmd 1 && cmd 2 && ... && cmd 20
ancak bir for
dö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:
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.
Kirli bir satırlık çözüm istiyorsanız, bir komut oluşturabilir ve bunu bash'a gönderebilirsiniz.
echo "cmd "{1..20}" &&" : | bash
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
break
Orada yasal değil mi? if
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
cmd && cmd