我正在尝试运行后台作业并从bash命令行获取其PID,例如:
$ cat &
$ echo $!
这两个命令完美无缺,但如果我尝试将它们内联到一行,我遇到了与$!
冲突的bash历史记录扩展问题:
$ (cat &); echo $!;
-bash: !: event not found
我在感叹号周围尝试了各种类型的引用,但我能得到的最多的是echo来显示文字字符串"$!"
。
任何帮助将不胜感激!
答案 0 :(得分:0)
您将第一个命令放在后台,并带有&
分隔符。通过将pid
分配给变量以稍后用于终止进程(或者您可以将其写入tmp文件),您可以轻松捕获自定义进程的$!
:例如。
cat & savpid=$!; ...do stuff...; kill $savpid (or kill %1 if no other jobs running)
您还必须选择使用jobs
命令检查后台进程的状态以列出后台作业,并使用fg
(前台)命令将命令置于前台。如果您有任何其他问题,请告诉我们。
为了完成您的尝试,您必须在后台处理之前重定向stderr
和stdout
:
cat 2>&1 & echo $!