Bash

設置 SHELL 環境變數時有什麼意外嗎?

  • August 11, 2017

我使用的是 macOS,因為它附帶 Bash 3.2,所以我已經通過自製軟體升級到 4.4。我已將終端配置為使用較新版本,方法是將其啟動命令設置為:

/usr/local/bin/bash -l

我最近在玩script記錄和回放終端會話的命令,發現它使用的是 Bash 3.2

設置export SHELL=/usr/local/bin/bash解決了這個問題,但我想知道是否建議設置它。我想不設置它可能是不可取的,但我只是不確定還有什麼基於SHELLenv var 做出決定。

SHELL環境變數的正常含義是使用者最喜歡的互動式shell。沒有義務它具有任何特定的語法(它不必像 Bourne),它支持任何特定的命令行語法(例如-c),或者它與登錄 shell 有任何關係(應用程序如果未設置,則使用SHELL通常預設為登錄 shell SHELL)。它主要被終端模擬器用作預設執行的程序。

如果您以文本模式登錄(在文本控制台上或通過 SSH),您將得到使用者數據庫中列出的登錄 shell/etc/passwd (例如)。當您在 GUI 環境中打開終端時,SHELL如果設置了環境變數,您將獲得由環境變數指定的 shell。如果您希望文本模式登錄使用相同的 shell,請使用 更改您的登錄 shell chsh,或者使用 將您的登錄 shell 切換到您最喜歡的 shellexec

有時您可能會遇到使用sh 語法$SHELL -c而不是sh -c執行程式碼的程序。但這非常罕見。POSIX 在技術上允許這樣做,但它會違反歷史用法。在實踐中,設置SHELL是安全的。大約二十年來,我已經將登錄 shell 設置為/bin/sh並在大多數機器上SHELL設置為。/path/to/zsh

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