test.shというスクリプトがあります。これは以下のように他のスクリプトfoo.shを呼び出します。
#!/bin/bash
echo "starting other script"
. ./foo.sh
foo.shスクリプトは次のとおりです。
#!/bin/bash
sleep 10
echo "running"
sleep 10
次に、端末で次のことを行います。
ps -def | grep foo.sh | grep -v grep
私は決して結果を得ません。端末からスクリプトの出力を表示できます。問題ありません。しかし、foo.shが実行されていることをどうやって確認できますか?
答え1
次foo.sh
のように起動します. ./foo.sh
。
シェルスクリプト自体はプロセスではありません。これはシェルインスタンス(つまりプロセス)によって解釈されます。
.
source
現在のシェル環境でコマンドを実行するコマンドのエイリアスです。これは./foo.sh
、これを開始したスクリプトを実行したのと同じシェルによって実行されることを意味します。新しいプロセスを作成しないため、find itは使用できませんps
。
foo.sh
で始めることができます./foo.sh
。この場合、シェルの新しいインスタンス、つまり新しいプロセスによって実行されます。
ただし、実行する操作によっては、./foo.sh
どちらの場合も、完了後に元のシェルの実行が異なる場合があります。同じシェルで実行されたときにfoo.sh
変更される環境変数は、元のスクリプトも実行したシェルに属します。これを変更すると、元のスクリプトに影響を与える可能性があります。
別のスクリプトで実行すると、foo.sh
環境変数への変更は元のスクリプトに影響を与えません。それらは異なるプロセスであり、何も共有しません。
foo.sh
しかし、実行中であるかどうかを確認できますか?
foo.sh
実行を再開する前に完了するのを待つため、起動されたスクリプトの場合は簡単ですfoo.sh
。
これは外部では不可能であるか、ほとんど不可能である可能性があります。