可能只使用脚本会更容易,但我想知道为什么不能用一个命令来做到这一点。到目前为止我已经尝试过:
$ (ls >/dev/null &) && echo $!
3135
$ (ls >/dev/null &) ; echo $! #bad idea, but if that worked, I could just add `sleep 0.1`
3135
$ ls >/dev/null & ; echo $!
bash: syntax error near unexpected token `;'
$ `ls >/dev/null &` && echo $!
3135
$ `ls >/dev/null &` ; echo $!
3135
该3135
数字是保存该变量的最后一个后台进程的PID $!
,并且它保持不变(我还使用 Konsole 并为了使进程成功后台运行,它会打印类似的内容[1] PID
)。唉,执行的命令都没有将进程发送到后台。
答案1
这应该做你想要的:
$ ls > /dev/null & echo $!
由于您以各种方式强制将后台命令放入子进程中,因此第一个 shell 没有任何后台进程,因此$!
未更新。
现在,后台进程由同一个 shell 启动,echo $!
现在它可以执行您想要的操作。