[root@localhost tmppcm]# ls ; echo 退出代码是:$? & echo pid 是:$! 测试.txt .. .... ..... ...... 最后一个文件.txt [1] 1265 pid 为:1265 退出代码是:0
在上面,它ls开始运行,然后以“并行”运行回声结束。
不完全是我想要的。我希望序列ls和echo exit code was: $?在后台执行,并在“并行”中回显进程 ID。
一个解决方案可能是使用||而不是;在ls和之间echo exit code was:
[root@localhost tmppcm]# ls || echo 退出代码是:$? & echo pid 是:$! [1] 1271 pid 是:1271 测试.txt .. .... ..... ...... 最后一个文件.txt 退出代码是:0
有没有更聪明的方法可以用A ; B & C我缺少的组合来做到这一点?
在这种情况下,您要使用命令组。由于您希望一些在后台运行,我们将使用该()变体,以便它们获得自己的子shell。您可以使用括号对命令进行分组,然后将该组(及其子外壳)放在后台中,例如:
( A; B ) & C
Run Code Online (Sandbox Code Playgroud)
或者在这个特定的例子中:
(ls ; echo exit code was: $?) & echo pid is: $!
Run Code Online (Sandbox Code Playgroud)