Answers:
您正在使用|
(管道)将命令的输出定向到另一个命令。您正在寻找的是&&
操作员仅在上一个命令成功的情况下才执行下一个命令:
cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
要么
cp /templates/apple /templates/used && mv /templates/apple /templates/inuse
总结一下(非详尽地)bash的命令运算符/分隔符:
|
stdout
将一个命令的标准输出()管道传输到另一命令的标准输入中。请注意stderr
,无论发生什么情况,它仍会进入其默认目的地。|&
将一个命令的两个stdout
和两个都管道传输stderr
到另一个命令的标准输入中。非常有用,在bash版本4及更高版本中可用。&&
&&
仅在上一个命令成功的情况下执行右手命令。||
仅执行||
上一个失败的命令。;
;
无论上一条命令成功还是失败,都将始终执行右手命令。除非set -e
先前已调用,否则将导致bash
错误失败。另一个选择是Ctrl+V Ctrl+J在每个命令的末尾键入。
示例(替换#
为Ctrl+V Ctrl+J):
$ echo 1#
echo 2#
echo 3
输出:
1
2
3
无论先前的命令是否失败,这将执行命令。
如同: echo 1; echo 2; echo 3
如果要停止执行失败的命令,请&&
在每行末尾添加最后一行。
示例(替换#
为Ctrl+V Ctrl+J):
$ echo 1 &&#
failed-command &&#
echo 2
输出:
1
failed-command: command not found
在zsh
您还可以使用Alt+Enter或Esc+Enter代替Ctrl+V Ctrl+J