Exec 組込みコマンドはシェルのプロセスを別の外部コマンドに置き換えます。またシェルのプロセスに対してリダイレクトを実行します。
exec [-cf] [-a コマンド名] [コマンド [引数…]]
Exec コマンドをコマンドを指定して実行すると、シェルは単純コマンドの実行の最後のステップと同様にしてコマンドを実行します。ただし、コマンドは必ず外部コマンドとしてみなされ、関数や組込みコマンドは無視します。そしてその外部コマンドはサブシェルではなく現在のコマンド実行環境で exec システムコールを呼び出すことで実行します。これにより、シェルのプロセスは新しく起動するコマンドによって置き換わります。
シェルが POSIX 準拠モードのときまたは対話モードでないとき、コマンドの起動に失敗するとシェルは直ちに終了します。
シェルが POSIX 準拠モードではなくかつ対話モードのとき、コマンドの起動に失敗してもシェルは終了しません。
シェルが POSIX 準拠モードではなくかつ対話モードのとき、停止中のジョブがあると、シェルは警告を表示し、コマンドを起動しません。警告を無視してコマンドを起動するには -f
(--force
) オプションを付けてください。
コマンドなしで実行した場合 exec コマンドは何も行いませんが、この exec コマンドを実行する際に行ったリダイレクトの効果は現在のコマンド実行環境に残ります。
-a コマンド名
, --as=コマンド名
-c
, --clear
-f
, --force
指定されたコマンドの起動に成功した場合、シェルのプロセスはそのコマンドのプロセスに置き換わってしまうので、終了ステータスはありません。
実行しようとしたコマンドが見つからなかった場合、終了ステータスは 127 です。コマンドが見つかったが実行できなかった場合、終了ステータスは 126 です。コマンドを指定せずに exec コマンドを実行した場合、終了ステータスは 0 です。
Exec コマンドは特殊組込みコマンドです。
POSIX にはオプションに関する規定はありません。よってオプションは POSIX 準拠モードでは使えません。