假设我有一个/templates/apple
文件,我想
把它放在两个不同的地方然后
取出原稿。
因此,/templates/apple
将被复制到/templates/used
和/templates/inuse
在那之后,我想删除原来的。cp
是最好的方法吗,然后是rm
?还是有更好的办法?
我想把所有的事情都排成一行,所以我想应该是这样的:
cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
这是正确的语法吗?
最佳答案
您正在使用|
(管道)将命令的输出定向到另一个命令。您需要的是&&
运算符,只有在前一个命令成功时才能执行下一个命令:
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
在出现错误时失败。
关于bash - 在shell的一行中运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51163760/