2011-05-29 90 views
9

我有一個很大的腳本叫做mandacalc,我想總是用nohup命令運行。如果我從命令行調用它:如何在一個bash腳本中包含nohup?

nohup mandacalc & 

一切都很快運行。但是,如果我嘗試在我的命令中包含nohup,那麼每次執行它時我都不需要輸入它,我收到一條錯誤消息。

到目前爲止,我嘗試這些選項:

nohup (
command1 
.... 
commandn 
exit 0 
) 

也:

nohup bash -c " 
command1 
.... 
commandn 
exit 0 
" # and also with single quotes. 

到目前爲止,我只得到抱怨的nohup命令執行的錯誤信息,或對其他報價在腳本中使用。

歡呼聲。

+0

你需要給的完整路徑可能NOHUP? '哪nohup' – wilbbe01 2011-05-29 16:13:17

回答

1

爲什麼不製作一個包含nohup ./original_script的腳本?

16

嘗試把這個在你的腳本的開頭:

#!/bin/bash 

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

# do stuff here 

如果你現在開始​​腳本作爲參數,它會自動重新啓動,從當前的外殼分離。

您仍然可以通過在沒有此選項的情況下啓動腳本來「在前臺」運行腳本。

+8

Bash是如此奇怪 – 2014-06-25 13:26:57

3

在你的bash(或首選的shell)啓動文件創建一個同名的別名:

別名mandacalc = 「nohup的mandacalc &」

1

只要把trap '' HUP在腳本的beggining。

此外,如果它創建子進程someCommand&你將不得不改變他們nohup someCommand&正常工作......我一直在研究這個很長一段時間,這兩個(陷阱和nohup的)的唯一組合在我的工作xterm關閉太快的特定腳本。

3

有一個很好的答案在這裏:http://compgroups.net/comp.unix.shell/can-a-script-nohup-itself/498135

#!/bin/bash 

### make sure that the script is called with `nohup nice ...` 
if [ "$1" != "calling_myself" ] 
then 
    # this script has *not* been called recursively by itself 
    datestamp=$(date +%F | tr -d -) 
    nohup_out=nohup-$datestamp.out 
    nohup nice "$0" "calling_myself" "[email protected]" > $nohup_out & 
    sleep 1 
    tail -f $nohup_out 
    exit 
else 
    # this script has been called recursively by itself 
    shift # remove the termination condition flag in $1 
fi 

### the rest of the script goes here 
. . . . . 
相關問題