如何运行nohup并将其pid文件写入单个bash语句中

我想在后台运行我的脚本,然后写它的PID文件。 我正在使用nohup来做到这一点。

这是我想出来的,

nohup ./myprogram.sh > /dev/null 2>&1 & && echo $! > run.pid 

但是这给了一个语法错误。

以下不会给出语法错误,但问题是echo $! 由于nohup在子shell中运行,因此不会写入正确的pid

 (nohup ./myprogram.sh > /dev/null 2>&1 &) && echo $! > run.pid 

任何解决scheme,因为我想要一个单行语句来实现这个?

在将脚本放在后台的redirect之后,您已经有了一个&符号。 因此,只需在该&号之后键入所需的命令,而不是其他任何前缀:

 nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid 

这应该工作:

 nohup ./myprogram.sh > /dev/null 2>&1 & echo $! > run.pid