java运行多个linux命令_在shell的一行中运行多个命令

说我有一个文件/templates/apple并且我想要

放在两个不同的地方,然后

删除原件。

因此, /templates/apple将被复制到/templates/used和/templates/inuse ,然后在此之后,我想删除原始文件。

cp是执行此操作的最佳方法,其次是rm吗? 或者,还有更好的方法?

我想一行完成所有操作,所以我认为它看起来像:

cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple

这是正确的语法吗?

#1楼

另一个选项是在每个命令的末尾键入Ctrl + V Ctrl + J。

示例(用Ctrl + V Ctrl + J替换# ):

$ echo 1#

echo 2#

echo 3

输出:

1

2

3

无论先前的命令是否失败,这将执行命令。

与: echo 1; echo 2; echo 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

#2楼

为什么不先将cp移至位置1,然后将mv移至位置2。这需要“删除”原始文件。

不,这不是正确的语法。 | 用于“管道”一个程序的输出,并将其转换为下一个程序的输入。 你想要的是; ,它分隔多个命令。

cp file1 file2 ; cp file1 file3 ; rm file1

如果您要求单个命令必须在下一个命令启动之前成功,那么您可以使用&&代替:

cp file1 file2 && cp file1 file3 && rm file1

这样,如果任何一个cp命令失败,则rm将不会运行。

#3楼

尝试这个..

cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple

#4楼

您正在使用| (管道)将命令的输出定向到另一个命令。 您正在寻找的是&&运算符,只有前一个命令成功执行才能执行下一个命令:

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 )用管道stdout到另一个命令的标准输入中。 请注意,无论发生什么情况, stderr仍会进入其默认目的地。

|&将一个命令的stdout和stderr都stderr到另一命令的标准输入中。 非常有用,在bash版本4及更高版本中可用。

&&执行的右手命令&&仅在上一个成功。

|| 执行||的右手命令 只有前一个失败。

; 执行的右手命令; 始终不管上一个命令是成功还是失败。 除非先前曾调用set -e ,否则这将导致bash因错误而失败。

#5楼

使用管道对我来说很奇怪。 无论如何,您应该使用逻辑and Bash运算符:

$ cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apples

如果cp命令失败,则不会执行rm 。

或者,您可以使用for循环和cmp制作更详细的命令行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值