设置 SHELL 环境变量时有什么惊喜吗?

设置 SHELL 环境变量时有什么惊喜吗?

我使用的是 macOS,由于它附带 Bash 3.2,所以我已通过自制程序升级到 4.4。我已将终端配置为使用较新版本,方法是将其启动命令设置为:

/usr/local/bin/bash -l

我最近在玩弄script记录和回放终端会话的命令,发现它使用的是 Bash 3.2

设置export SHELL=/usr/local/bin/bash修复了这个问题,但我想知道是否建议设置它。我想这可能是不可取的不是设置它,但我只是不确定还有什么根据SHELL环境变量做出决定。

答案1

环境变量的常规含义SHELL是用户最喜欢的交互式shell。没有义务它具有任何特定的语法(它不必像 Bourne 一样),它支持任何特定的命令行语法(例如-c),或者它与登录 shell 有任何关系(应用程序如果未使用 sed,则通常默认使用SHELL登录 shell )。SHELL它主要被终端模拟器用作默认运行的程序。

如果您以文本模式登录(在文本控制台或通过 SSH),您将得到的是登录外壳在用户数据库中列出(例如/etc/passwd)。当您在 GUI 环境中打开终端时,SHELL如果设置了环境变量,您将获得由环境变量指定的 shell。如果您希望使用相同的 shell 进行文本模式登录,请使用chsh, 或更改您的登录 shell让您的登录 shell 切换到您最喜欢的 shellexec

$SHELL -c有时您可能会遇到使用 sh 语法而不是sh -c执行代码的程序。但这种情况非常罕见。从技术上讲,这是 POSIX 允许的,但它会违反历史用法。实际上,设置SHELL是安全的。我已经将我的登录 shell 设置为/bin/sh并在大多数机器上SHELL设置/path/to/zsh为 大约二十年了。

相关内容