我正在編寫一個腳本,我需要在用戶的$ PATH上查找命令並獲取命令的完整路徑。問題是我不知道用戶的登錄shell是什麼,或者他們的do文件中可能有什麼奇怪的東西。我爲我的簡單小腳本使用了Bourne shell,因爲它需要在一些可能沒有bash的較早版本的Solaris平臺上運行。
「which」和「whence」的某些實現將獲取用戶的點文件,並且這對於所有用戶來說都不是真正可移植的。我很喜歡一個簡單的UNIX實用程序,它只是爲可執行文件掃描PATH的基本工作並報告第一個匹配的完整路徑。
但我會解決任何對所有用戶都穩定的/ bin/sh解決方案。
我正在尋找一個比編寫我自己的/ bin/sh循環更好的解決方案,這個循環可以截斷$ PATH並一次搜索一行。看起來這很普遍,應該有一種可重用的方式來做到這一點。
我的「漫長的道路」第一近似值是這樣的:
IFS=:
for i in $PATH; do
if [ -x $i/$cmd ]; then
echo $i/$cmd
fi
done
有沒有更簡單的東西和便攜式?
你在找什麼? – 2011-09-01 23:20:32
你需要擔心他們所有的點文件等嗎?腳本運行時,用戶是否已經在shell中?也就是說,這些文件已經來源了? –
問題是,如果我的.profile只爲ksh設置,並且我的sh腳本最終將它作爲運行'which'或'whence'命令的一部分來源。我的Solaris 11機箱上的'whence'手冊頁是指內置的ksh。我正在尋找一種便攜式的方式來做到這一點。 –