$SHELL 環境變數僅適用於互動式 shell 嗎?

$SHELL 環境變數僅適用於互動式 shell 嗎?

我看到環境變數有兩種可能的用途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明確使用環境變數。這systempopen函數必須呼叫一個名為 的程式sh。一些實用程式(例如ex,mailx, …) 必須使用$SHELL, 但始終執行使用者提供的程式碼;make明確忽略$SHELL.

該部分關於環境變數允許公用事業$SHELL,但如果不符合 POSIX sh,則 C API(「系統介面」)不會有不同的行為。

實際上,SHELL設定為使用者的登入 shell,它可能相容也可能不相容 POSIX。茲什是流行的替代品。我在各種 Unix 變體上使用 zsh 已經有十年了,我不記得有任何系統實用程式失敗。我偶爾會看到一些草率編寫的程式碼呼叫$SHELL而不是sh執行 sh 腳本。這種情況非常罕見,並且不會阻止您設定SHELL為您喜歡的任何內容。

簡而言之,是的,SHELL是您最喜歡的互動式 shell,應用程式無法保證它接受什麼語法,甚至不保證它是否接受選項-c

相關內容