Bash

’echo $SHELL’ 和 ‘which bash’ 之間的區別

  • January 20, 2018

我試圖確定 bash 解釋器在我的 Solaris 系統上的位置,我有點困惑。當我輸入:

echo $SHELL

結果路徑是:

/bin/bash

當我輸入:

which bash

我得到:

/usr/bin/bash

誰能解釋一下這種差異?

您的系統可能已bash安裝在多個位置,無論是作為不同版本bash還是只是符號連結。

which對於大多數用途來說,它並不是一個真正有用的命令——它在腳本中並不是真正可移植或非常有用的。一般來說,type是更好的。背後的想法whichPATH搜尋您作為參數提供的命令。

$SHELL不一定反映目前執行的 shell。相反,$SHELL是使用者首選的 shell,通常是/etc/passwd. 如果您在登錄後啟動不同的 shell,則不一定希望$SHELL與目前 shell 匹配。

如您所見,$SHELL並且which完全不相關。這些都不會告訴您您實際執行的是什麼外殼。

附註:不幸的是,將您目前執行的 shell 與文件系統中的某個位置相匹配比人們想像的要難。這是因為二進製文件被載入到記憶體中以便執行,並且在大多數係統中,即使您從磁碟中刪除了原始文件,記憶體中的副本仍將繼續正常執行(核心可能會將磁碟副本保留在“邊緣”中,直到它被真的不再需要了)。我認為沒有任何可移植的方式來解決這個問題 - 你必須求助於平台特定的方法。例如,在 Linux 上,檢查連結/proc/$$/exe應該可以讓您大致了解正在執行的文件(正在$$執行的 shell 的程序 ID 在哪裡)。不幸的是,我不熟悉 Solaris,所以我無法幫助您。

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