我想找到一个相当于
cmd 1 && cmd 2 && ... && cmd 20
但用循环内表达的命令,for
如
for i in {1..20}
do
cmd $i
done
您建议对第二个表达式进行哪些更改以找到第一个表达式的等效项?
答案1
与原始序列等效的是:
for i in {1..20}
do
cmd $i || break
done
与阿米特的答案的不同之处在于脚本不会退出,即将执行可能遵循序列/循环的潜在命令。请注意,根据我的建议,整个循环的返回状态将始终为 true,如果与您的情况相关,这可能会被修复。
答案2
如果您想要一个肮脏的单行解决方案,您可以创建一个命令并将其发送到 bash。
echo "cmd "{1..20}" &&" : | bash
答案3
如果其中一个失败,您可以跳出循环
for i in {1..55}; do
if ! cmd $i; then
exit 1
fi
done
答案4
这就是我在终端中执行任务而不使用&&
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) 字节数据。来自 google.com (172.217.26.174) 的 64 字节:icmp_seq=1 ttl=56 时间=259 毫秒
--- google.com ping 统计数据 --- 发送 1 个数据包,接收 1 个数据包,0% 数据包丢失,时间 0ms rtt min/avg/max/mdev = 259.794/259.794/259.794/0.000 ms yahoo.com PING yahoo.com ( 98.138.253.109) 56(84) 字节数据。来自 yahoo.com (98.138.253.109) 的 64 字节:icmp_seq=1 ttl=51 时间=398 毫秒
--- yahoo.com ping 统计数据 --- 发送 1 个数据包,接收 1 个数据包,0% 数据包丢失,时间 0ms rtt min/avg/max/mdev = 398.974/398.974/398.974/0.000 ms