
我看到環境變數有兩種可能的用途SHELL
:
- 它可以用來指定互動的使用者想要使用的 shell,和/或
- 進程可以使用它來執行其他命令,替換通常的
/bin/sh -c "..."
習慣用法中的命令。
如果僅用於前者,可能會很奇怪(例如ipython
),如果也用於後者,則需要提供POSIX相容性的基本形式,例如理解參數-c
並保持環境完整(這非常棘手)。
這POSIX標準這裡不是很明確,只是這樣寫。
此變數應表示使用者首選命令語言解釋器的路徑名。如果此解釋器不符合 IEEE Std 1003.1-2001 第 2 章 Shell 命令語言的 Shell 和實用程式捲中的 Shell 命令語言,則實用程式的行為可能與 IEEE Std 1003.1-2001 中所述的不同。
第二種用途實際上是常見的和/或有效的,因此如果我設定為奇怪的東西,我需要擔心什麼SHELL
?
答案1
POSIX C API 均未SHELL
明確使用環境變數。這system
和popen
函數必須呼叫一個名為 的程式sh
。一些實用程式(例如ex
,mailx
, …) 必須使用$SHELL
, 但始終執行使用者提供的程式碼;make
明確忽略$SHELL
.
該部分關於環境變數允許公用事業$SHELL
,但如果不符合 POSIX sh,則 C API(「系統介面」)不會有不同的行為。
實際上,SHELL
設定為使用者的登入 shell,它可能相容也可能不相容 POSIX。茲什和魚是流行的替代品。我在各種 Unix 變體上使用 zsh 已經有十年了,我不記得有任何系統實用程式失敗。我偶爾會看到一些草率編寫的程式碼呼叫$SHELL
而不是sh
執行 sh 腳本。這種情況非常罕見,並且不會阻止您設定SHELL
為您喜歡的任何內容。
簡而言之,是的,SHELL
是您最喜歡的互動式 shell,應用程式無法保證它接受什麼語法,甚至不保證它是否接受選項-c
。