command コマンド

英語表記command

日本語表記コマンド実行制御

正式名称command

危険度安全

What does it mean?

コマンドの存在確認や種別表示を行い、必要に応じてシェル関数を迂回して実行します。移植性重視の確認手段として重要です。

Command Quest

command を今日の道具にする

コマンドの存在確認や種別表示を行い、必要に応じてシェル関数を...

$ command [-pVv] 名前 [引数 ...]
関連用語18
次のコマンド0
FAQ2
参照4

概要

コマンドの存在確認や種別表示を行い、必要に応じてシェル関数を迂回して実行します。移植性重視の確認手段として重要です。

基本構文

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分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. git、sh、cdに対してcommand -vを実行し、外部コマンドと組み込みの違いを確認します。

  2. 同じ名前をcommand -vとtypeで調べ、出力の違いを比較します。

資格試験との関連

  • LinuC レベル1
    範囲: 1.03.1 コマンドラインの操作
    根拠: official
    LinuCレベル1では、コマンドライン操作やシェル環境の理解が問われます。commandはその基礎を支える代表的なコマンドです。
  • LPIC-1
    範囲: 105.1 シェル環境のカスタマイズと利用
    根拠: official
    LPIC-1では、シェル環境、変数、履歴、コマンド解決の理解が重視されます。commandはその周辺知識と一緒に学ぶ価値が高いコマンドです。
  • 共通基礎
    範囲: Linuxコマンド基礎
    根拠: editorial
    試験横断で、commandはコマンドライン操作、手順読解、トラブルシュートの基礎体力を作る項目です。

オプション

  • -v
    名前がどう解決されるかを簡潔に表示します。存在確認の定番です。
    command -v git
  • -V
    より説明的な情報を表示します。
    command -V printf
  • -p
    実装既定のPATHで検索します。移植性確保に使うことがあります。
    command -p getconf PATH

実行結果サンプル

  • command -v ls
    /usr/bin/ls または ls
  • command -V cd
    cd is a shell builtin

戻り値コード

  • 0 要求した確認または実行に成功しました。
  • 1 名前が見つからない、または失敗しました。
  • 126 見つかったが実行できません。
  • 127 コマンドが見つかりません。

使用例

  • command -v git
  • command -V printf
  • command ls
  • command -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. 同名のシェル関数があっても、それを使わずに本来のコマンド解決へ進めます。

関連用語

  • シェル
  • Bash
  • Zsh
  • Fish
  • POSIXシェル
  • PATH
  • alias
  • shell function
  • shebang
  • interpreter
  • Python
  • Perl
  • Ruby
  • Go
  • Rust
  • Java
  • Node.js
  • pip

参照リンク

関連記事