我正在使用&&
来链接命令(execute a command only if the previous command returned ok (0) code)。
但是我需要在许多命令(超过8个)上添加此条件,然后我的代码看起来非常丑陋(对于一个唯一的行来说太长了):
command 1 && command 2 && command 3 && command 4 && command 5 && command 6 && command 7 && command 8...
是否可以将&&
用于多于一行?
command 1
&& command 2
&& command 3
&& command 4
&& command 5
&& command 6
&& command 7
&& command 8
...
答案
按照@Kamil Cuk的建议,在每行末尾使用&&可以解决我的问题。但是只会跳过&&之后的行。我宁愿跳过其余所有内容。 但我同意-这个主张解决了这个问题。我们可以在每行的末尾使用&&在多行上应用条件。谢谢。
我测试了@iBug的建议。我发现了同样的问题,其他指令(不在列表中)仍在处理中。但是甚至最差使用\的结果是错误的:它执行第一个命令,然后打印命令2名称...
echo "A" \
echo "B" \
echo "YES"
--> A echo B echo YES
最后,@ Biffen找到了我使用的解决方案:set -e
-e如果简单命令以非零状态退出,则立即退出,除非 失败的命令是直到或while循环的一部分,是 if语句,是&&或||的一部分列表,或者命令的返回状态 正在使用!反转。 -o errexit
感谢大家的快速帮助。
关于, 尼古拉斯
答案 0 :(得分:3)
反斜杠!
command 1 \
&& command 2 \
&& command 3 \
&& command 4 \
&& command 5 \
&& command 6 \
&& command 7 \
&& command 8 \
...
&& command n
当心,不要在 last 行上误加反斜杠!
答案 1 :(得分:3)
Bash知道&&
要求有另一个命令,因此请将其放在换行符之前以避免反斜杠。
command 1 &&
command 2 &&
command 3 ... etc
这个问题听起来有些模糊,就像您应该使用其他东西一样。如果不是set -e
,那么也许是make
而不是普通的旧Shell脚本?