Yash マニュアル: command 組込みコマンド
Author: magicant
Description: Yash の command 組込みコマンドについて

# Command 組込みコマンド

Command 組込みコマンドはコマンドを実行します。またコマンドの種類を特定します。

## 構文

- `command [-befp] コマンド [引数…]`
- `command -vV [-abefkp] コマンド…`

## 説明

`-v` (`--identify`) オプションならびに `-V` (`--verbose-identify`) オプションを付けずに実行すると、command コマンドは与えられたコマンドを与えられた引数で実行します。コマンドの実行の仕方は単純コマンドの実行の最後のステップに準じますが、コマンドの検索では外部コマンド・組込みコマンド・関数の内オプションで指定したものしか検索しません。またコマンドが特殊組込みコマンドの場合、コマンドのオプションやオペランドの使い方が間違っていたりリダイレクトエラーや代入エラーが起きたりしてもシェルは終了しません。

`-v` (`--identify`) オプションまたは `-V` (`--verbose-identify`) オプションを付けて実行すると、command コマンドは与えられたコマンドの種類とパスを特定しそれを標準出力に出力します。コマンドはエイリアスや関数であっても構いません。

`-v` (`--identify`) オプションを付けて実行したときの出力は以下のようになります。

- コマンドの検索の結果見つかったコマンドおよびその他の外部コマンドは、その絶対パスを出力します。
- コマンドの検索によらず実行される組込みコマンドや関数は、単にその名前を出力します。
- 予約語は、単にその名前を出力します。
- エイリアスは、コマンドとして実行可能な形式でその名前と値を出力します。
- コマンドが見つからなかった場合は、何も出力しません。(終了ステータスが非 0 になります)

## オプション

`-a`, `--alias`
  コマンドとしてエイリアスを検索の対象にします。
`-b`, `--builtin-command`
  コマンドとして組込みコマンドを検索の対象にします。
`-e`, `--external-command`
  コマンドとして外部コマンドを検索の対象にします。
`-f`, `--function`
  コマンドとして関数を検索の対象にします。
`-k`, `--keyword`
  コマンドとして予約語を検索の対象にします。
`-p`, `--default-path`
  コマンドの検索において、`PATH` 変数の代わりに、標準のコマンドをすべて含むようなシステム固有のデフォルトパスを用いて外部コマンドを検索します。
`-v`, `--identify`
  与えられたコマンドの種類とパスを特定し、簡単な形式で標準出力に出力します。
`-V`, `--verbose-identify`
  与えられたコマンドの種類とパスを特定し、人間にとって読みやすい形式で標準出力に出力します。

`-a` (`--alias`) オプションと `-k` (`--keyword`) オプションは `-v` (`--identify`) オプションまたは `-V` (`--verbose-identify`) オプションと一緒にしか使えません。

`-a` (`--alias`), `-b` (`--builtin-command`), `-e` (`--external-command`), `-f` (`--function`), `-k` (`--keyword`) オプションのどれも指定しなかった場合は `-be` (`-v` (`--identify`), `-V` (`--verbose-identify`) オプションを指定した場合) または (`-v` (`--identify`), `-V` (`--verbose-identify`) オプションを指定していない場合) を指定したものとみなします。

## オペランド

コマンド
  実行するまたは種類を特定するコマンドの名前です。
引数…
  実行するコマンドに渡すコマンドライン引数です。

## 終了ステータス

`-v` (`--identify`) オプションならびに `-V` (`--verbose-identify`) オプションを付けずに実行した場合、command コマンドの終了ステータスは実行したコマンドの終了ステータスです。実行しようとしたコマンドが見つからなかった場合、終了ステータスは 127 です。コマンドが見つかったが実行できなかった場合、終了ステータスは 126 です。

`-v` (`--identify`) オプションまたは `-V` (`--verbose-identify`) オプションを付けて実行した場合、終了ステータスは原則として 0 です。ただしコマンドが見つからなかった場合やその他エラーが発生したときは非 0 です。

## 補足

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

POSIX に規定のあるオプションは `-p`, `-v`, `-V` だけです。これ以外のオプションは POSIX 準拠モードでは使えません。また POSIX 準拠モードでは `-v` または `-V` オプションを使用するときコマンドはちょうど一つしか指定できません。

POSIX は `-v` オプションと `-V` オプションを同時に指定することを認めていません。Yash ではこれら二つのオプションを両方指定すると最後に指定したものが有効になります。