通过自身调用一个bash脚本

4

我需要用不同的参数调用一个bash脚本,使其作为后台进程运行,所以我使用了类似以下的命令:

if [[ $a == $b  ]]
then
  $0 -v &> /dev/null
fi

问题在于,尽管我使用“&”作为后缀将同一脚本作为后台进程调用,并将所有输出重定向到/dev/null,但我调用脚本的终端未被释放。我猜这是因为最初调用的脚本有一个进程正在作为前台进程运行。所以问题是,如何自己调用bash脚本,使其在第二次调用时运行为后台进程,并杀死第一次运行脚本的进程以释放控制台?
2个回答

13

你没有使用&将其作为后台进程运行。&>是一个完全独立的令牌,可以同时重定向标准输出和标准错误。如果你想将该命令放在后台运行,应该是$0 -v &>/dev/null &


4
尝试像这样做:

尝试像这样做:

nohup $0 -v &

nohup命令的作用是将后台作业分离并忽略信号,请查看man页面了解更多信息。


我认为如果您向OP解释&>的含义,那么您的答案会更好,因为他的假设是错误的。尽管您对该命令的回答也很好。可能应该将stdout和stderr也重定向到/dev/null。 - Jasonw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接