Bash
’echo $SHELL’ 和 ‘which bash’ 之間的區別
我試圖確定 bash 解釋器在我的 Solaris 系統上的位置,我有點困惑。當我輸入:
echo $SHELL
結果路徑是:
/bin/bash
當我輸入:
which bash
我得到:
/usr/bin/bash
誰能解釋一下這種差異?
您的系統可能已
bash
安裝在多個位置,無論是作為不同版本bash
還是只是符號連結。
which
對於大多數用途來說,它並不是一個真正有用的命令——它在腳本中並不是真正可移植或非常有用的。一般來說,type
是更好的。背後的想法which
是PATH
搜尋您作為參數提供的命令。
$SHELL
不一定反映目前執行的 shell。相反,$SHELL
是使用者首選的 shell,通常是/etc/passwd
. 如果您在登錄後啟動不同的 shell,則不一定希望$SHELL
與目前 shell 匹配。如您所見,
$SHELL
並且which
完全不相關。這些都不會告訴您您實際執行的是什麼外殼。附註:不幸的是,將您目前執行的 shell 與文件系統中的某個位置相匹配比人們想像的要難。這是因為二進製文件被載入到記憶體中以便執行,並且在大多數係統中,即使您從磁碟中刪除了原始文件,記憶體中的副本仍將繼續正常執行(核心可能會將磁碟副本保留在“邊緣”中,直到它被真的不再需要了)。我認為沒有任何可移植的方式來解決這個問題 - 你必須求助於平台特定的方法。例如,在 Linux 上,檢查連結
/proc/$$/exe
應該可以讓您大致了解正在執行的文件(正在$$
執行的 shell 的程序 ID 在哪裡)。不幸的是,我不熟悉 Solaris,所以我無法幫助您。