Path
which
,但所有
我想大多數人都熟悉該
which
命令,並且我經常使用它。我剛剛遇到一種情況,我不僅好奇哪個命令在我的路徑中是第一個,而且我的所有路徑中的所有命令有多少以及在哪裡。我嘗試了 which 手冊頁(打字man which
讓我發笑),但什麼也沒看到。
在某些系統上,**
which -a
**顯示所有匹配項。如果您的 shell 是 bash 或 zsh¹,您可以type
改用:type foo
顯示第一個匹配項並**type -a** foo
顯示所有匹配項。這三個命令type
,which
並且whence
做的事情大多是一樣的;它們在 shell 和作業系統之間的可用性、選項以及它們報告的具體內容不同。type
始終可用並顯示所有可能的類似命令的名稱(別名、關鍵字、shell 內置函式、函式和外部命令)。顯示所有匹配項的唯一完全可移植的方法是解析
$PATH
自己。這是一個執行此操作的 shell 腳本。如果將其設為 shell 函式,請確保將函式體括在括號中(以便更改為IFS
並且set -f
不會轉義函式),然後更改exit
為return
.#!/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 僅在我嘗試時列印第一個匹配項。