shell:在 bash/sh 中组合分号和 & 符号

shell:在 bash/sh 中组合分号和 & 符号
[root@localhost tmppcm]# ls ; echo 退出代码为: $? & echo pid 是: $!
测试.txt
..
....
……
......
最后文件.txt
[1]1265
进程号是:1265
退出代码为:0

在上面,它开始运行ls,然后以“并行”运行 echo 结束。

不完全是我想要的。我希望序列lsecho exit code was: $?在后台执行,并以“并行”方式回显进程 ID。

解决方案可能是使用||而不是;betweenlsecho exit code was

[root@localhost tmppcm]# ls || echo 退出代码为: $? & echo pid 是: $!
[1]1271
进程号是:1271
测试.txt
..
....
……
......
最后文件.txt
退出代码为:0

有没有更聪明的方法来使用A ; B & C我缺少的组合来做到这一点?

答案1

在这种情况下你想使用命令组。由于您希望某些程序在后台运行,因此我们将使用该()品种,以便它们获得自己的子 shell。您可以使用括号对命令进行分组,然后将该组(及其子 shell)放在后台,如下所示:

( A; B ) & C

或者在这个具体的例子中:

(ls ; echo exit code was: $?) & echo pid is: $!

相关内容