解説
このコマンドはどれが動く?command -vとtypeで名前の解決先を確認しよう
同じ名前のコマンドを使ったつもりなのに、別の環境では動きが違う。名前に対応するものが、実行ファイルなのか、シェルの組み込みなのかを調べてみよう。

同じ名前のコマンドを使ったつもりなのに、別の環境では動きが違う。名前に対応するものが、実行ファイルなのか、シェルの組み込みなのかを調べてみよう。
このページは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 | 解決される名前や場所 |
| 実際の実行確認 | 必要な入力や依存関係も含め、目的を果たせるか |
実行ファイルが見つかっても、必要なライブラリーや設定が足りなければ動かないことがある。逆に、パスを一つ見つけただけで、安全なプログラムだと保証するものでもない。
表示されたパスを共有するときは、利用者名などの情報が含まれていないか確認する。今回の二つの確認コマンド自体は、ファイルの中身や設定を書き換えないよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。