
別のシェルスクリプト(main.sh)内でシェルスクリプト(inner.sh)を呼び出すと、最初のスクリプト(main.sh)は続行する前にinner.shが完了するのを待ちます。 inner.shが失敗すると、main.shも失敗します。
たとえば、
cat .main.sh
#!/bin/bash
bin/bash .inner.sh
main.sh は inner.sh の終了後にのみ終了します。
どうすればinner.shを別のプロセス(サブプロセスではなく、同じプロセスではなく、main.shと並列ではない)で実行できますか?
私がやりたいことは、inner.shに何が起こってもmain.shが実行され続けることです。
答え1
/bin/bash .inner.sh &
.inner.sh
子プロセスとして実行されますが、.inner.sh
まだプロセスの一部です。.main.sh
.inner.sh
ただし、完全に別々のプロセスとして実行するには、次のことをお勧めします。
/bin/bash .inner.sh & disown
または
nohup /bin/bash .inner.sh &
.inner.sh
完全に独立したプロセスとして実行されます。したがって^C
、を超えても.main.sh
実行され.inner.sh
続けます(^C
通訳者がorを実行したdisown
後に実行したと仮定nohup
)。