在mac osx shell上转义最后一个bg作业pid($!)

时间:2014-09-09 01:41:57

标签: macos bash

我正在尝试运行后台作业并从bash命令行获取其PID,例如:

$ cat &
$ echo $!

这两个命令完美无缺,但如果我尝试将它们内联到一行,我遇到了与$!冲突的bash历史记录扩展问题:

$ (cat &); echo $!;
-bash: !: event not found

我在感叹号周围尝试了各种类型的引用,但我能得到的最多的是echo来显示文字字符串"$!"

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您将第一个命令放在后台,并带有&分隔符。通过将pid分配给变量以稍后用于终止进程(或者您可以将其写入tmp文件),您可以轻松捕获自定义进程的$!:例如。

cat & savpid=$!; ...do stuff...; kill $savpid (or kill %1 if no other jobs running)

您还必须选择使用jobs命令检查后台进程的状态以列出后台作业,并使用fg(前台)命令将命令置于前台。如果您有任何其他问题,请告诉我们。

为了完成您的尝试,您必须在后台处理之前重定向stderrstdout

cat 2>&1 & echo $!