使用脚本本身将脚本传递到后台

使用脚本本身将脚本传递到后台

可以这样做:

nohup ./run.sh > /dev/null 2>&1 &

它将进程发送到后台,丢弃其输出并允许我们关闭终端。

有没有可能使用脚本本身来做到这一点?我的意思是,我会执行这个:

./run.sh

在脚本的某个地方,我们可以做这样的事情:

nohup "$0" > /dev/null 2>&1 &

那么当脚本运行时,它的行为与上面相同吗?

我想我们可以为此有两个单独的脚本。但是,是否可以在单个脚本中完成?

我这样问是因为脚本将从系统调用,并且我不想更改系统调用脚本的方式,我宁愿更改脚本的执行方式。

答案1

如果您需要决定脚本是否应该在后台执行,或者它是否已经是后台脚本(例如命令行参数),您可以实现这一点。

假设您通常调用脚本

./run.sh

您可以添加一个命令行参数,例如bg告诉脚本它已经在第二次执行中,因此它不会无限次地递归调用自身(或直到系统资源用完)。

./run.sh bg

你可以这样实现

#! /bin/sh

if [ "$1" = "bg" ]
then

    # do the normal work

else

    nohup "$0" bg > /dev/null 2>&1 &

fi

相关内容