# Exec 組込みコマンド

Exec 組込みコマンドはシェルのプロセスを別の外部コマンドに置き換えます。またシェルのプロセスに対してリダイレクトを実行します。

## 構文

- `exec [-cf] [-a コマンド名] [コマンド [引数…]]`

Exec コマンドでは、POSIX 準拠モードであるかどうかにかかわらずオプションはオペランドより先に全て指定しなければなりません。これは exec コマンドに対するオプションとコマンドに対するオプションを区別するために重要です。コマンドより後にある引数はすべて引数とみなされます。

## 説明

Exec コマンドをコマンドを指定して実行すると、シェルは単純コマンドの実行の最後のステップと同様にしてコマンドを実行します。ただし、コマンドは必ず外部コマンドとしてみなされ、関数や組込みコマンドは無視します。そしてその外部コマンドはサブシェルではなく現在のコマンド実行環境で exec システムコールを呼び出すことで実行します。これにより、シェルのプロセスは新しく起動するコマンドに置き換わります。

シェルが POSIX 準拠モードのときまたは対話モードでないとき、コマンドの起動に失敗するとシェルは直ちに終了します。

シェルが POSIX 準拠モードではなくかつ対話モードのとき、停止中のジョブがあると、シェルは警告を表示し、コマンドを起動しません。一度 exec が実行されると、シェルが持っているジョブの情報は失われるため、手動でシグナルを送ってジョブを再開または終了させなければならなくなります。警告を無視してコマンドを起動するには `-f` (`--force`) オプションを付けてください。

コマンドなしで実行した場合 exec コマンドは何も行いませんが、この exec コマンドを実行する際に行ったリダイレクトの効果は現在のコマンド実行環境に残ります。

## オプション

`-a コマンド名`
`--as=コマンド名`

  コマンドの代わりにコマンド名をコマンド名としてコマンドに渡します。

`-c`
`--clear`

  既存の環境変数をすべて削除した状態でコマンドを実行します。ただしこの exec コマンドを実行する際に行った変数代入の結果は環境変数としてコマンドに渡します。

`-f`
`--force`

  警告を無視してコマンドを実行します。

## オペランド

コマンド

  実行するコマンドです。

引数…

  実行するコマンドに渡すコマンドライン引数です。

## 終了ステータス

指定されたコマンドの起動に成功した場合、シェルのプロセスはそのコマンドのプロセスに置き換わってしまうので、終了ステータスはありません。

実行しようとしたコマンドが見つからなかった場合、終了ステータスは 127 です。コマンドが見つかったが実行できなかった場合、終了ステータスは 126 です。コマンドを指定せずに exec コマンドを実行した場合、終了ステータスは 0 です。

## 補足

Exec コマンドは特殊組込みコマンドです。

POSIX にはオプションに関する規定はありません。よってオプションは POSIX 準拠モードでは使えません。