次のことができます。
nohup ./run.sh > /dev/null 2>&1 &
プロセスをバックグラウンドに送信して出力を削除した後、端末を閉じることができます。
スクリプト自体を使用してこれを実行できますか?私の言うことは、私はこれを実行します:
./run.sh
スクリプトのどこかで次のことができます。
nohup "$0" > /dev/null 2>&1 &
では、スクリプトが実行されると上記と同じように動作しますか?
私はこれのために2つの別々のスクリプトを持つことができると思います。しかし、単一のスクリプトで実行できますか?
スクリプトがシステムから呼び出されるので、これを尋ねるのですが、システムがスクリプトを呼び出す方法を変更したくなく、むしろスクリプトの実行方法を変更したいと思います。
答え1
スクリプトをバックグラウンドで実行する必要があるかどうかを判断する必要がある場合、またはすでにバックグラウンドスクリプト(コマンドライン引数など)である場合は、これを実行できます。
通常、スクリプトを呼び出すと仮定すると
./run.sh
たとえば、スクリプトにすでに2回目の実行中であることを知らせるためにコマンドライン引数を追加すると、無限の回数bg
(またはシステムリソースが不足するまで)は自分自身を再帰的に呼び出しません。
./run.sh bg
こうして達成できます
#! /bin/sh
if [ "$1" = "bg" ]
then
# do the normal work
else
nohup "$0" bg > /dev/null 2>&1 &
fi