web-dev-qa-db-ja.com

「which」を使用しないのはなぜですか?次に何を使用しますか?

実行可能ファイルへのパスを探す場合、またはUnixシェルでコマンド名を入力した場合の結果を確認する場合、さまざまなユーティリティ(whichtypecommandwhencewherewhereiswhatishashなど)が多数あります。

whichは避けるべきだとよく耳にします。どうして?代わりに何を使うべきですか?

357

ステファンが言及しなかったように思われる(私の簡単なスキムから)ことの1つは、whichがシェルのパスハッシュテーブルを認識していないことです。これは、実際に実行されている結果を表していない結果を返す可能性があり、デバッグには効果がありません。

20
Chris Down

これは避けるべきだとよく耳にします。どうして?代わりに何を使うべきですか?

聞いたことがない。具体的な例を挙げてください。 Linuxディストリビューションとインストールされているソフトウェアパッケージについては、whichがどこからきたのかについて心配します。

SLES 11.4 x86-64

tcshバージョン6.18.01:

> which which

which: Shell built-in command.

bashバージョン3.2-147:

> which which

/usr/bin/which

> which -v

GNU which v2.19, Copyright (C) 1999 - 2008 Carlo Wood.
GNU which comes with ABSOLUTELY NO WARRANTY;
This program is free software; your freedom to use, change
and distribute this program is protected by the GPL.

whichtil-linuxの一部です。Linuxオペレーティングシステムの一部として使用するためにLinux Kernel Organizationによって配布される標準パッケージです。これらの他のファイルも提供します

/bin/dmesg
/bin/findmnt
/bin/logger
/bin/lsblk
/bin/more
/bin/mount
/bin/umount
/sbin/adjtimex
/sbin/agetty
/sbin/blkid
/sbin/blockdev
/sbin/cfdisk
/sbin/chcpu
/sbin/ctrlaltdel
/sbin/elvtune
/sbin/fdisk
/sbin/findfs
/sbin/fsck
/sbin/fsck.cramfs
/sbin/fsck.minix
/sbin/fsfreeze
/sbin/fstrim
/sbin/hwclock
/sbin/losetup
/sbin/mkfs
/sbin/mkfs.bfs
/sbin/mkfs.cramfs
/sbin/mkfs.minix
/sbin/mkswap
/sbin/nologin
/sbin/pivot_root
/sbin/raw
/sbin/sfdisk
/sbin/swaplabel
/sbin/swapoff
/sbin/swapon
/sbin/switch_root
/sbin/wipefs
/usr/bin/cal
/usr/bin/chrp-addnote
/usr/bin/chrt
/usr/bin/col
/usr/bin/colcrt
/usr/bin/colrm
/usr/bin/column
/usr/bin/cytune
/usr/bin/ddate
/usr/bin/fallocate
/usr/bin/flock
/usr/bin/getopt
/usr/bin/hexdump
/usr/bin/i386
/usr/bin/ionice
/usr/bin/ipcmk
/usr/bin/ipcrm
/usr/bin/ipcs
/usr/bin/isosize
/usr/bin/line
/usr/bin/linux32
/usr/bin/linux64
/usr/bin/look
/usr/bin/lscpu
/usr/bin/mcookie
/usr/bin/mesg
/usr/bin/mkzimage_cmdline
/usr/bin/namei
/usr/bin/rename
/usr/bin/renice
/usr/bin/rev
/usr/bin/script
/usr/bin/scriptreplay
/usr/bin/setarch
/usr/bin/setsid
/usr/bin/setterm
/usr/bin/tailf
/usr/bin/taskset
/usr/bin/time
/usr/bin/ul
/usr/bin/uname26
/usr/bin/unshare
/usr/bin/uuidgen
/usr/bin/wall
/usr/bin/whereis
/usr/bin/which
/usr/bin/write
/usr/bin/x86_64
/usr/sbin/addpart
/usr/sbin/delpart
/usr/sbin/fdformat
/usr/sbin/flushb
/usr/sbin/freeramdisk
/usr/sbin/klogconsole
/usr/sbin/ldattach
/usr/sbin/partx
/usr/sbin/rcraw
/usr/sbin/readprofile
/usr/sbin/rtcwake
/usr/sbin/setctsid
/usr/sbin/tunelp

俺の util-linuxはバージョン2.19です。リリースノートは、v2.13日付(2007年8月28日)まで遡って簡単に見つけることができます。これの目的や目標が何であるかはわかりませんが、331回も賛成された長いことでは、確かに答えられませんでした。

0
ron