ฉันต้องการหาสิ่งที่เทียบเท่า
cmd 1 && cmd 2 && ... && cmd 20
แต่มีคำสั่งแสดงอยู่ภายในfor
ลูปเช่น
for i in {1..20}
do
cmd $i
done
คุณอยากแนะนำอะไรให้เปลี่ยนในนิพจน์ที่สองเพื่อหาค่าที่เท่ากัน
ฉันต้องการหาสิ่งที่เทียบเท่า
cmd 1 && cmd 2 && ... && cmd 20
แต่มีคำสั่งแสดงอยู่ภายในfor
ลูปเช่น
for i in {1..20}
do
cmd $i
done
คุณอยากแนะนำอะไรให้เปลี่ยนในนิพจน์ที่สองเพื่อหาค่าที่เท่ากัน
คำตอบ:
เทียบเท่ากับลำดับเดิมของคุณจะเป็น:
for i in {1..20}
do
cmd $i || break
done
ความแตกต่างกับคำตอบของ Amit คือสคริปต์จะไม่ออกเช่นจะรันคำสั่งที่อาจเกิดขึ้นซึ่งอาจเป็นไปตามลำดับ / ลูป โปรดทราบว่าสถานะการส่งคืนของลูปทั้งหมดจะเป็นจริงเสมอกับคำแนะนำของฉันซึ่งอาจได้รับการแก้ไขหากเกี่ยวข้องในกรณีของคุณ
หากคุณต้องการโซลูชันบรรทัดเดียวที่สกปรกคุณสามารถสร้างคำสั่งและส่งไปยัง bash
echo "cmd "{1..20}" &&" : | bash
คุณสามารถแยกวงออกได้ถ้าหนึ่งในนั้นล้มเหลว
for i in {1..55}; do
if ! cmd $i; then
exit 1
fi
done
break
ถูกกฎหมายใช่ไหม ฉันค่อนข้างมั่นใจว่าif
ข้อความจะไม่รบกวน ..
นี่คือวิธีที่ฉันทำงานของฉันใน terminal โดยไม่ต้องใช้ &&
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 PING google.com (172.217.26.174) 56 (84) ไบต์ของข้อมูล 64 ไบต์จาก google.com (172.217.26.174): icmp_seq = 1 ttl = 56 time = 259 ms
--- สถิติ google ping --- 1 แพ็คเก็ตที่ส่ง, 1 ที่ได้รับ, 0% การสูญเสียแพ็กเก็ต, เวลา 0ms rtt นาที / เฉลี่ย / สูงสุด / mdev = 259.794 / 259.794 / 259.794 / 0.000 ms yahoo.com PING yahoo.com ( 98.138.253.109) 56 (84) ไบต์ของข้อมูล 64 ไบต์จาก yahoo.com (98.138.253.109): icmp_seq = 1 ttl = 51 เวลา = 398 ms
--- yahoo.com ping สถิติ --- 1 แพ็คเก็ตที่ส่ง, 1 ที่ได้รับ, 0% การสูญเสียแพ็กเก็ต, เวลา 0ms rtt นาที / avg / max / mdev = 398.974 / 398.974 / 398.974 / 0.000 ms
cmd && cmd