[root@localhost tmppcm]# ls ; echo 退出代码为: $? & echo pid 是: $! 测试.txt .. .... …… ...... 最后文件.txt [1]1265 进程号是:1265 退出代码为:0
在上面,它开始运行ls
,然后以“并行”运行 echo 结束。
不完全是我想要的。我希望序列ls
和echo exit code was: $?
在后台执行,并以“并行”方式回显进程 ID。
解决方案可能是使用||
而不是;
betweenls
和echo 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: $!