bash - 在shell的一行中运行多个命令

标签 bash shell

假设我有一个/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仍然进入默认目的地,无论发生什么情况。
|&将一个命令的stdoutstderr管道连接到另一个命令的标准输入中。非常有用,在bash版本4及更高版本中可用。
&&仅在前一个命令成功时执行&&的右侧命令。
||只执行||的右侧命令,前一个命令失败。
;始终执行;的右侧命令,而不管前一个命令是成功还是失败。除非先前调用了set -e,否则会导致bash在出现错误时失败。

关于bash - 在shell的一行中运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51163760/

相关文章:

linux - 是否存在任何神奇的 "stdout"文件?

git - 防止 sed 在文件末尾添加换行符

bash - 将 "-I"标志添加到 bash 中的路径字符串

linux - 如何以正确的方式向 PBS 系统提交工作列表?

c - 试图计算缓冲区中的参数个数

bash - find -exec 找不到本地函数 "find: Log: No such file or directory"

linux - 在 bash 脚本中运行 R 脚本

c++ - 在 ubuntu 中使用/bin/bash 运行 grep 时,popen 错误重定向意外

linux - 带有命令行 unix shell 脚本的 awk 命令

linux - 发生段错误时停止 linux bash 脚本