Bash
設置 SHELL 環境變數時有什麼意外嗎?
我使用的是 macOS,因為它附帶 Bash 3.2,所以我已經通過自製軟體升級到 4.4。我已將終端配置為使用較新版本,方法是將其啟動命令設置為:
/usr/local/bin/bash -l
我最近在玩
script
記錄和回放終端會話的命令,發現它使用的是 Bash 3.2設置
export SHELL=/usr/local/bin/bash
解決了這個問題,但我想知道是否建議設置它。我想不設置它可能是不可取的,但我只是不確定還有什麼基於SHELL
env var 做出決定。
SHELL
環境變數的正常含義是使用者最喜歡的互動式shell。沒有義務它具有任何特定的語法(它不必像 Bourne),它支持任何特定的命令行語法(例如-c
),或者它與登錄 shell 有任何關係(應用程序如果未設置,則使用SHELL
通常預設為登錄 shellSHELL
)。它主要被終端模擬器用作預設執行的程序。如果您以文本模式登錄(在文本控制台上或通過 SSH),您將得到使用者數據庫中列出的登錄 shell
/etc/passwd
(例如)。當您在 GUI 環境中打開終端時,SHELL
如果設置了環境變數,您將獲得由環境變數指定的 shell。如果您希望文本模式登錄使用相同的 shell,請使用 更改您的登錄 shellchsh
,或者使用 將您的登錄 shell 切換到您最喜歡的 shellexec
。有時您可能會遇到使用sh 語法
$SHELL -c
而不是sh -c
執行程式碼的程序。但這非常罕見。POSIX 在技術上允許這樣做,但它會違反歷史用法。在實踐中,設置SHELL
是安全的。大約二十年來,我已經將登錄 shell 設置為/bin/sh
並在大多數機器上SHELL
設置為。/path/to/zsh