Running multiple commands in one line in shell
假设我有一个文件
因此,
之后我想删除原件。
我想在一行中完成所有操作,所以我认为它看起来像:
1 | cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple |
这是正确的语法吗?
您正在使用
1 | cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple |
要么
1 | cp /templates/apple /templates/used && mv /templates/apple /templates/inuse |
总结(非详尽的)bash的命令操作符/分隔符:
-
| 管道(管道)将一个命令的标准输出(stdout )转换为另一个命令的标准输入。请注意,stderr 仍会进入其默认目标,无论发生什么情况。 -
|& 将一个命令的stdout 和stderr 连接到另一个命令的标准输入中。非常有用,可在bash版本4及更高版本中使用。 -
&& 仅在前一个命令成功时才执行&& 的右手命令。 -
|| 执行|| 的右手命令,只有前一个命令失败。 -
; 始终执行; 的右手命令,无论前一个命令是成功还是失败。除非之前调用set -e ,否则会导致bash 失败。
为什么
不,这不是正确的语法。
1 | cp file1 file2 ; cp file1 file3 ; rm file1 |
如果您需要在下一个命令启动之前必须成功,那么您将使用
1 | cp file1 file2 && cp file1 file3 && rm file1 |
这样,如果任一
请注意,
另一种选择是在每个命令的末尾键入Ctrl + V Ctrl + J。
示例(将
1 2 3 | $ echo 1# echo 2# echo 3 |
输出:
1 2 3 | 1 2 3 |
无论先前的命令是否失败,这都将执行命令。
与:
如果要在失败的命令上停止执行,请在除最后一行之外的每一行的末尾添加
示例(将
1 2 3 | $ echo 1 &&# failed-command &&# echo 2 |
输出:
1 2 | 1 failed-command: command not found |
在
试试这个..
使用管道对我来说似乎很奇怪。无论如何你应该使用逻辑
1 | $ cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apples |
如果
或者,您可以使用