
Unixスクリプトの実行モードについて質問があります。
たとえば、次の行を含むスクリプトは次のとおりです。
command B
function C()
{
Myscript // Myscript is a script
command D
}
command E
Myscript
実行に時間がかかる場合(例:5分)、次のコマンド(command D
)が実行Myscript
または完了するのを待ちます。
答え1
特定のスクリプトの場合、どちらも実行されませMyscript
んcommand D
。関数を定義しましたが、C
呼び出しませんでした。
実行順序は次のとおりです。
command B
完了するまで実行します。command E
完了するまで実行します。
呼び出すと、完了するまでC
実行されMyscript
、次にcommand D
完了するまで実行されます。
シェルスクリプトから呼び出されるすべては表示された順序で実行され、完了するまで実行されます。他のジョブと並列に何かを実行する必要がある場合は、ジョブ制御を使用する必要があります(&
&文字を使用してジョブをバックグラウンドに配置する方法を参照)。簡単な例:
A
B
完了するまで実行し、A
完了B
するまで実行します。スクリプトが完了しました。
A &
B
バックグラウンドで実行し、A
フォアグラウンドでBを実行します。シェルスクリプトはB
完了すると終了します。A
まだ実行している可能性があります。
A &
B &
A
バックグラウンドで実行してから(A
完了を待たずに)B
バックグラウンドで実行します。演劇はすぐに終了します。
A &
B &
wait
A
バックグラウンドで実行してから(A
完了を待たずに)B
バックグラウンドで実行します。その後、スクリプトは待ってから完了するA
とB
終了します。
答え2
1つの例外がありますが、これについては後で詳しく説明します。ただし、これらのコマンドは同じシェルで実行されます(新しいMyscript
シェルを開いても、command D
そのコマンドが実行されるのとまったく同じ「親」シェルを持つことになります)。 * NIXシェルは並列化をサポートしていないため、制御がMyscript
通過できるように実行を停止する必要があります(終了コードを使用)command D
。
シグナルをMyscript
使用したり、後続のデタッチを作成して分離したりする場合は例外です。これにより、スクリプトがバックグラウンドに配置されます。NOHUP
&
Myscript
次のコードを調べてください。
openssl enc -e bf -in verybigfile -out outputfile -k thisismykey &; # this is a long operation because of the size of the very big file
echo 'hi!' # this will be written during the encrypting operation
今これがほとんど自明になることを願っています。
Alexiosの答えには良い点が含まれています。関数を呼び出さないので実行されません。