概要
コマンドの存在確認や種別表示を行い、必要に応じてシェル関数を迂回して実行します。移植性重視の確認手段として重要です。
基本構文
command [-pVv] 名前 [引数 ...]詳細解説
commandは、シェルのコマンド解決に関わるPOSIX定義の組み込みです。最もよく使うのはcommand -vで、指定した名前が現在の環境で利用可能か、どのように解決されるかを確認できます。
また、同名のシェル関数が定義されている時に、関数を経由せず本来のコマンドを呼びたい場面でも使います。例えばlsを関数で上書きしている環境で、素のlsを実行したい時にcommand lsと書くことがあります。
whichより移植性が高く、スクリプトでコマンド存在確認を書くならcommand -vが定番です。
このコマンドを使う場面
コマンドの存在確認を移植性高く書きたい時、whichの代わりに使いたい時、関数を迂回して外部コマンドや組み込みを呼びたい時に使います。
まず安全に試す方法
1. command -v sh
2. command -v cd
3. command ls
4. type ls
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
git、sh、cdに対してcommand -vを実行し、外部コマンドと組み込みの違いを確認します。
-
同じ名前をcommand -vとtypeで調べ、出力の違いを比較します。
資格試験との関連
-
LinuC レベル1
範囲: 1.03.1 コマンドラインの操作根拠: officialLinuCレベル1では、コマンドライン操作やシェル環境の理解が問われます。commandはその基礎を支える代表的なコマンドです。
-
LPIC-1
範囲: 105.1 シェル環境のカスタマイズと利用根拠: officialLPIC-1では、シェル環境、変数、履歴、コマンド解決の理解が重視されます。commandはその周辺知識と一緒に学ぶ価値が高いコマンドです。
-
共通基礎
範囲: Linuxコマンド基礎根拠: editorial試験横断で、commandはコマンドライン操作、手順読解、トラブルシュートの基礎体力を作る項目です。
実行結果サンプル
-
command -v ls/usr/bin/ls または ls -
command -V cdcd is a shell builtin
戻り値コード
- 0 要求した確認または実行に成功しました。
- 1 名前が見つからない、または失敗しました。
- 126 見つかったが実行できません。
- 127 コマンドが見つかりません。
使用例
command -v gitcommand -V printfcommand lscommand -p getconf PATH
よくあるエラー
-
whichはあるのにスクリプトで不安定 原因: whichは標準仕様ではなく実装差があります。対処: 存在確認はcommand -vへ切り替えます。
-
関数で上書きした名前をそのまま実行してしまう 原因: シェル解決順で関数が先に選ばれています。対処: 必要ならcommand 名前で関数を迂回します。
導入・互換性情報
commandはPOSIXで定義されています。-vと-Vは実装差が小さく移植性が高い一方、表示文言はシェルによって異なります。
- Debian GNU/Linux / 13 / Bash 5.2.37
注意点 / セキュリティリスク
危険度は低いですが、commandはalias展開や関数解決の意味を理解して使う必要があります。存在確認だけでなく、実行時の優先順位を変える効果がある点を忘れないでください。
FAQ
-
Q. コマンド存在確認はwhichとcommand -vのどちらがよいですか。 A. 移植性と一貫性を重視するならcommand -vのほうが適しています。
-
Q. command lsは何をしているのですか。 A. 同名のシェル関数があっても、それを使わずに本来のコマンド解決へ進めます。
関連用語
参照リンク
- カテゴリー: Shell And Cli
- シェル依存: Posix Sh
- レベル: Basic
- 対応試験: LinuC, LinuC レベル1, LPIC, LPIC-1, 共通基礎