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

sof*_*ear 4 shell bash

[root@localhost tmppcm]# ls ; echo 退出代码是:$? & echo pid 是:$!
测试.txt
..
....
.....
......
最后一个文件.txt
[1] 1265
pid 为:1265
退出代码是:0

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

不完全是我想要的。我希望序列lsecho 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我缺少的组合来做到这一点?

Eri*_*ouf 7

在这种情况下,您要使用命令组。由于您希望一些在后台运行,我们将使用该()变体,以便它们获得自己的子shell。您可以使用括号对命令进行分组,然后将该组(及其子外壳)放在后台中,例如:

( A; B ) & C
Run Code Online (Sandbox Code Playgroud)

或者在这个特定的例子中:

(ls ; echo exit code was: $?) & echo pid is: $!
Run Code Online (Sandbox Code Playgroud)