概要
PATH上から実行ファイルの場所を探して表示します。手軽ですが、移植性やシェル解決全体の確認ではcommand -vやtypeのほうが適することがあります。
基本構文
which [オプション] 名前 ...詳細解説
whichは、指定したコマンド名に対して、PATHに従って見つかる実行ファイルの場所を表示するための確認用コマンドです。インストール済みプログラムの場所を手早く知りたい時に便利です。
ただし、whichはPOSIX標準ではありません。実装差があり、環境によっては未導入、別挙動、shell script実装など差が出ます。また、aliasや関数、シェル組み込みまで含めた現在のシェル解決順を正確に知りたい場合には不向きです。
実務では、外部コマンドの実体パスをざっと確認する用途にとどめ、移植性重視のスクリプトではcommand -v、Bash対話確認ではtypeを優先するのが安全です。
このコマンドを使う場面
外部コマンドの実体パスを手早く知りたい時、複数のPATH候補があるか確認したい時に使います。
まず安全に試す方法
1. which ls
2. which -a python3
3. command -v ls
4. type ls
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
lsやcdを対象にwhich、command -v、typeの出力差を比べます。
実行結果サンプル
-
which ls/usr/bin/ls
戻り値コード
- 0 少なくとも1件見つかりました。
- 1 見つかりませんでした。
- >1 実装依存のエラーが起きました。
使用例
which lswhich -a python3which grep
よくあるエラー
-
whichでは見つからないのにコマンドは実行できる 原因: 現在のシェルでaliasや関数として定義されている可能性があります。対処: typeやcommand -vで確認します。
-
環境によってwhich -aが使えない 原因: whichは標準仕様ではなく、実装差があります。対処: 移植性が必要ならcommand -vを基本にします。
導入・互換性情報
whichはPOSIX標準ではありません。実装差があり、利用可否、オプション、aliasや関数の扱いが環境で異なります。移植性重視ならcommand -vを優先します。
- Debian GNU/Linux / 13 / Bash 5.2.37
注意点 / セキュリティリスク
危険度は低いですが、whichの結果だけでaliasや関数が無いと判断すると誤認につながります。診断用途ではtypeやcommand -vと使い分けてください。
FAQ
-
Q. whichはスクリプトで使ってもよいですか。 A. 単純用途なら動くこともありますが、移植性や正確さを重視するならcommand -vのほうが無難です。
-
Q. whichとtypeはどう違いますか。 A. whichは外部コマンドの場所確認寄りで、typeは現在のシェル解決全体の確認に向きます。
関連用語
参照リンク
- カテゴリー: Shell And Cli
- レベル: Basic