mandacalcという大きなスクリプトがあります。これは常にNohupコマンドで実行したいと思います。コマンドラインから次のように呼び出すと:
Nohup mandacalc &
すべてが迅速に実行されます。しかし、コマンド内にNohupを含めようとすると、実行するたびに入力する必要がないため、エラーメッセージが表示されます。
これまでのところ、私はこれらのオプションを試しました:
Nohup (
command1
....
commandn
exit 0
)
そしてまた:
Nohup bash -c "
command1
....
commandn
exit 0
" # and also with single quotes.
これまでのところ、Nohupコマンドの実装、またはスクリプト内で使用されている他の引用符について不平を言うエラーメッセージしか表示されません。
乾杯。
スクリプトの先頭にこれを配置してみてください。
#!/bin/bash
case "$1" in
-d|--daemon)
$0 < /dev/null &> /dev/null & disown
exit 0
;;
*)
;;
esac
# do stuff here
引数として--daemon
を使用してスクリプトを開始すると、現在のシェルから切り離されてスクリプトが再起動します。
このオプションなしでスクリプトを開始することにより、スクリプトを「フォアグラウンドで」実行することができます。
Bash(または優先シェル)スタートアップファイルに同じ名前のエイリアスを作成します。
alias mandacalc="Nohup mandacalc &"
ここにいい答えがあります: 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" "$@" > $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
. . . . .
Nohup ./original_script
を含むスクリプトを作成してみませんか?
スクリプトの最初にtrap '' HUP
を置くだけです。
また、子プロセスsomeCommand&
を作成する場合は、正しく機能させるためにNohup someCommand&
に変更する必要があります...私はこれを長い間研究しており、これら2つの組み合わせ(トラップとNohupのみ) )xtermのクローズが速すぎる特定のスクリプトで動作します。