如何在bash脚本中包含nohup?

fel*_*ebm 11 unix bash shell nohup

我有一个名为mandacalc的大脚本,我想总是使用nohup命令运行.如果我从命令行调用它:

nohup mandacalc &
Run Code Online (Sandbox Code Playgroud)

一切都很快.但是,如果我尝试在命令中包含nohup,那么每次执行它时我都不需要输入它,我收到一条错误消息.

到目前为止,我试过这些选项:

nohup (
command1
....
commandn
exit 0
)
Run Code Online (Sandbox Code Playgroud)

并且:

nohup bash -c "
command1
....
commandn
exit 0
" # and also with single quotes.
Run Code Online (Sandbox Code Playgroud)

到目前为止,我只收到错误消息,抱怨nohup命令的实现,或者脚本中使用的其他引用.

干杯.

小智 16

尝试将其放在脚本的开头:

#!/bin/bash

case "$1" in
    -d|--daemon)
        $0 < /dev/null &> /dev/null & disown
        exit 0
        ;;
    *)
        ;;
esac

# do stuff here
Run Code Online (Sandbox Code Playgroud)

如果您现在以脚本--daemon作为参数启动脚本,它将从当前shell重新启动.

您仍然可以通过在没有此选项的情况下启动脚本来"在前台"运行脚本.

  • Bash太奇怪了 (12认同)

Aqu*_*wer 6

只需放在trap '' HUP脚本的开头即可。

另外,如果它创建了子进程,someCommand&您将必须更改它们才能nohup someCommand&正常工作...我已经研究了很长时间并且只有这两者的组合(trap 和 nohup)适用于我的特定脚本,其中 xterm 也关闭快速地。


小智 5

在 bash(或首选 shell)启动文件中创建一个同名别名:

alias mandacalc="nohup mandacalc &"
Run Code Online (Sandbox Code Playgroud)


cni*_*tar 4

你为什么不制作一个包含 的脚本nohup ./original_script