この exec コマンドは、現在のシェルプロセスを指定されたコマンドに置き換えます。通常、コマンドを実行すると、新しいプロセスが生成(フォーク)されます。exec コマンドは、新しいプロセスを生成しません。代わりに、現在のプロセスが新しいコマンドでオーバーレイされます。つまり、exec新しいプロセスを作成することなく、現在のシェルの代わりにコマンドが実行されます。
execコマンドの最も一般的な使用法は3つあります。
1.プロセスの入れ替え
例1:
新しいbashシェルを次のように開いた場合
$ bash
でpstree、それは次のようになります
├─gnome-terminal
├─bash───bash───pstree
以前のbashシェルはまだ残っており、新しいbashシェルを入手しました。一方、新しいbashシェルを開くと、
$ exec bash
pstreeショー
├─gnome-terminal
├─bash───pstree
ここで古いものbashが新しいものに置き換えられます。1つのコマンドで複数のログインを終了することは特に便利です。それはより安全で、誤って開いたターミナルを離れる可能性をなくします。1つのコマンドでrootとユーザーの両方を終了するを参照してください
例2:ファイルを次のように開くことができます
$ exec vi filename.txt
あなたが終了するとvi、シェルがすでに交換されると別途の端末を閉鎖する必要はありません。viを閉じるとすぐにターミナルも閉じられます。
2.シェルスクリプト内でファイル記述子をリダイレクトする方法
このexec コマンドは、ファイル記述子を動的に開いたり、閉じたり、コピーしたりするシェルスクリプトでも使用できます。これにより、コマンド呼び出し文字列ではなく、シェルスクリプト内のさまざまなファイルへのSTDIN、STDERR、STDOUTおよびその他のファイル記述子のリダイレクトを実行できます。コマンドまたは引数を指定しない場合は、リダイレクトシンボルとファイル記述子を指定して、これらの機能を実行できます。
script.shログファイルを作成したいシェルスクリプトがあるとしますscript.log。次のように使用できますexec。
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
これは
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. execコマンドを使用してプロセスのステージを作成する
また、execコマンドを使用して、プロセスのステージのように互いに順次実行する一連のシェルスクリプトを作成することもできます。コントロールを次のスクリプトに転送する必要があるたびに新しいプロセスを生成する代わりに、execコマンドを実行します。
この場合、各ステージの最後のステートメントexecは、次のステージを呼び出すコマンドでなければなりません。
詳細についてはexec、シェルスクリプトでのコマンドの使用を参照してください。
注:上記の一部はこれから取得されます。