This file documents ‘which’ version 2.x.

Copyright © 2000 - 2015, by

Carlo Wood, Run on IRC <carlo@alinoe.com>
RSA-1024 0x624ACAD5 1997-01-26                    Sign & Encrypt
Fingerprint16 = 32 EC A7 B6 AC DB 65 A6  F6 F6 55 DD 1C DC FF 61

Japanese Translation Copyright © 2023 Linux JM project

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the section entitled “GNU General Public License” is included
exactly as in the original, and provided that the entire resulting
derived work is distributed under the terms of a permission notice
identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that the section entitled “GNU General Public License”
may be included in a translation approved by the author instead of in
the original English.

   Note (by the translator): Actually, “GNU General Public License” is
not included in the original version of this info manual.  You will get
a copy of it at <https://www.gnu.org/licenses/>.

‘which’: コマンドのフルパスを表示する
*************************************

‘which’ プログラムは、(シェル) コマンドのフルパスを表示する。

このファイルは、‘which’ version 2.21 (2015-03-20 に更新) について解説し
ている。

【読者への御注意】これは、GNU 版の ‘which’ コマンドのマニュアルである。
‘which’ の実装には、いくつかの系統があるので、お手元の ‘which’ が別系統
であるときは、オプションなどがここで説明しているものとかなり違うかもしれ
ない。 そのときは、お手元の ‘which’ に付属するマニュアルをご覧になってい
ただきたい。

1 ‘which’ プログラムについて
****************************

‘Which’ は、ひとつ以上の引数を取り、 そうした引数のそれぞれについて、そ
れがシェルのプロンプトから入力されていたら、 実行されていたであろう実行
ファイルのフルパスを標準出力に表示する。‘Which’ は、それを行うに当たり、
‘bash(1)’ と同じアルゴリズムを使って、環境変数 ‘PATH’ にリストされたディ
レクトリを調べ、実行ファイルやスクリプトを捜す。

2 ‘which’ の起動
****************

‘which’ 起動の書式は、次のとおりである。

     which [options] [--] programname [...]

3 オプション一覧
****************

‘--all’
‘-a’
     ‘PATH’ 中で最初に引数に一致したものだけでなく、一致したすべての実行
     ファイルを表示する。

‘--read-alias’
‘-i’
     標準入力からエイリアスを読み込んで、引数に一致するものを標準出力に
     書き出す。 このオプションは、which コマンドの代わりにエイリアスを使
     用する場合に、その中で使うとよい。 たとえば、次のようにだ。
     ‘alias which='alias | which -i'’

‘--skip-alias’
     ‘--read-alias’ オプションが指定されていても、それを無視する。 この
     オプションは、which の代わりに使うエイリアスや関数で ‘--read-alias’
     オプションを使用している場合に、通常のバイナリを明示的に探すのに役
     に立つ。

‘--read-functions’
     標準入力からシェル関数の定義を読み込んで、引数に一致するものを標準
     出力に書き出す。 このオプションは、which コマンドの代わりにシェル関
     数を使用する場合に、 その中で使うとよい。たとえば、次のようにだ。
     ‘which () { declare -f | /usr/bin/which --read-functions $@; }
     export -f which’

‘--skip-functions’
     ‘--read-functions’ が指定されていても、それを無視する。 このオプシ
     ョンは、which の代わりに使うエイリアスや関数で ‘--read-functions’ オ
     プションを使用している場合に、通常のバイナリを明示的に捜すのに役に
     立つ。

‘--skip-dot’
     環境変数 ‘PATH’ 中のドット (.) で始まるパスをスキップする。 (1)

‘--skip-tilde’
     ‘PATH’ 中のチルダ (~) で始まるディレクトリと、‘HOME’ ディレクトリ以
     下にある実行ファイルをスキップする。

‘--show-dot’
     ‘PATH’ 中にドット (.) で始まるパスがあるとき、 それに対応するディレ
     クトリで引数に一致する実行ファイルが見つかったら、 フルパスではなく
     "./programname" などと表示する。

‘--show-tilde’
     ディレクトリに ‘HOME’ ディレクトリが含まれているときは、チルダを出
     力する。 このオプションは、‘which’ が root の権限で実行されている場
     合には無視される。

‘--tty-only’
     出力が端末でない場合は、これより右にあるオプションの処理をしない。
     (2)

‘--version, -v, -V’
     バージョン情報を標準出力に表示して、正常終了する。

‘--help’
     使用法を標準出力に表示して、正常終了する。

   ---------- Footnotes ----------

   (1) 環境変数 ‘PATH’ に ’.’ や ’./bin’、’.local’ などが登録されている
場合のことを言っている。’$HOME/.local’ といったディレクトリのことではな
い。そのへんの事情は、‘--show-dot’ でも同じである。

   (2) このオプションに効果があるのは、‘--show-dot’, ‘--show-tilde’,
‘--skip-dot’, ‘--skip-tilde’ に対してだけのようである。

4 返り値
********

‘Which’ は、検索に失敗した引数の個数を返す。引数に ‘programname’ が指定
されなかった場合には、-1 を返す。

5 用例
******

このユーティリティの使用に当たっては、以下のように、エイリアスや (C
shell の場合) シェル関数に (Bourne shell の場合)、‘which’ コマンドの代わ
りに使用するものを追加しておくことをおすすめする。

   [ba]sh:

     which ()
     {
       (alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@
     }
     export -f which

   [t]csh:

     alias which 'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

このようにしておくと、which をプロンプトから実行したときには、パスを ~/
や　./ という読みやすい形で表示するが、スクリプトから使用した場合には、 通
常どおりフルパスの表示になる。(1)

     > which q2
     ~/bin/q2
     > echo `which q2`
     /home/carlo/bin/q2

   ---------- Footnotes ----------

   (1) 実際には、こうした関数やエイリアスを端末のプロンプトから実行しよ
うと、 スクリプトから実行しようと、表示に変わりはない。 出力先が、標準出
力や標準エラーか、それ以外かで違いが生じるようである (実行例の二番目では
、標準入力に出力している)。念のため、ご自分でお試しいただきたい。

6 バグ
******

‘HOME’ ディレクトリの特定は、環境変数 ‘HOME’ を調べることで行われるが、
この変数が存在しない場合は、‘HOME’ ディレクトリの特定作業は打ち切られる
。(1) また、‘Which’ は、二つのディレクトリが事実上同じものであっても、 片
方のパスにシンボリックリンクが含まれている場合は、別のディレクトリと見な
すことになる。

   ---------- Footnotes ----------

   (1) この記述は古いようだ。パッケージ同梱の NEWS ファイルによれば、
which-2.19 以来、環境変数 ‘HOME’ が設定されていない場合は、/etc/passwd フ
ァイルが調べられ、そこでも指定されていない場合は、’/’ がホームディレクト
リになるとのことである。

7 関連項目
**********

‘bash(1)’