Path

which,但所有

  • March 22, 2011

我想大多數人都熟悉該which命令,並且我經常使用它。我剛剛遇到一種情況,我不僅好奇哪個命令在我的路徑中是第一個,而且我的所有路徑中的所有命令有多少以及在哪裡。我嘗試了 which 手冊頁(打字man which讓我發笑),但什麼也沒看到。

在某些系統上,**which -a**顯示所有匹配項。如果您的 shell 是 bash 或 zsh¹,您可以type改用:type foo顯示第一個匹配項並**type -a** foo顯示所有匹配項。這三個命令typewhich並且whence做的事情大多是一樣的;它們在 shell 和作業系統之間的可用性、選項以及它們報告的具體內容不同。type始終可用並顯示所有可能的類似命令的名稱(別名、關鍵字、shell 內置函式、函式和外部命令)。

顯示所有匹配項的唯一完全可移植的方法是解析$PATH自己。這是一個執行此操作的 shell 腳本。如果將其設為 shell 函式,請確保將函式體括在括號中(以便更改為IFS並且set -f不會轉義函式),然後更改exitreturn.

#!/bin/sh
set -f       # disable globbing
IFS=:        # break words at : only
not_found=1
for d in $PATH; do
 if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
   printf '%s\n' "$d/$x"
   not_found=0
 fi
done
exit $not_found

¹或 ksh 93,根據文件,雖然 ksh 93s+ 2008-01-31 僅在我嘗試時列印第一個匹配項。

引用自:https://unix.stackexchange.com/questions/9683