DESIGN / CODE / INFRA / AI

解説

このコマンドはどれが動く?command -vとtypeで名前の解決先を確認しよう

同じ名前のコマンドを使ったつもりなのに、別の環境では動きが違う。名前に対応するものが、実行ファイルなのか、シェルの組み込みなのかを調べてみよう。

このコマンドはどれが動く?command -vとtypeで名前の解決先を確認しよう
保存リストを見る →
この記事の道しるべ 6項目

同じ名前のコマンドを使ったつもりなのに、別の環境では動きが違う。名前に対応するものが、実行ファイルなのか、シェルの組み込みなのかを調べてみよう。

このページはBashを使う読み取りの練習。ソフトのインストールや削除、PATHの恒久的な変更は行わない。調べた先のプログラムを、確認のために実行する必要もないよ。

コマンド名は、ファイルだけとは限らない

シェルは、組み込みコマンド、関数、エイリアス、PATH上の実行ファイルなどを、規則に従って扱う。端末で入力した名前が、毎回同じ場所のファイルを意味するとは限らないんだ。

PATHは、外部コマンドを探す場所の一覧に関係する環境変数。今回の練習では値を書き換えず、今の名前が何へ解決されるかを読むだけにしよう。

typeで種類を見る

type -t printf
type -t ls

一般的なBashの練習環境では、printfはbuiltin、lsはfileとなる例がある。builtinはシェルの組み込み、fileは実行ファイルとして見つかったことを表す。

ただし、同じ名前の関数やエイリアスなどがあると、結果が変わる場合がある。自分の環境で違う表示が出ても、ただちに故障とは判断しないようにしよう。

command -vで解決される名前や場所を読む

command -v printf
command -v ls

組み込みなどではprintfのような名前が表示され、外部コマンドではパスが表示される場合がある。必ず絶対パスが返る関数として扱わないことが大切だよ。

編集部では、初期化ファイルを読まないBashの練習環境で、printfが組み込み、lsが実行ファイルになることと、その解決結果を確認した。読者の端末の設定を検査したという意味ではないよ。

見つかるかだけを分けたい場合

if command -v studio_practice_missing_tool >/dev/null; then
  printf 'found\n'
else
  printf 'not found\n'
fi

この名前が存在しない練習環境なら、not foundとなる。ここで調べているのはコマンド名を解決できるかで、プログラム本体は実行していないよ。存在する名前へ変える場合も、処理を理解してから試そう。

見つかったことと、正常動作は別

確認 分かることの例
type -t Bashが扱う種類
command -v 解決される名前や場所
実際の実行確認 必要な入力や依存関係も含め、目的を果たせるか

実行ファイルが見つかっても、必要なライブラリーや設定が足りなければ動かないことがある。逆に、パスを一つ見つけただけで、安全なプログラムだと保証するものでもない。

表示されたパスを共有するときは、利用者名などの情報が含まれていないか確認する。今回の二つの確認コマンド自体は、ファイルの中身や設定を書き換えないよ。

コマンドへ渡す文字は引用符の基本、実行後の状態は終了コードへ。

参照した公式資料

確認日:2026年10月26日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。