其中';在OSX中定义的环境变量SHELL和BASH?

其中';在OSX中定义的环境变量SHELL和BASH?,bash,zsh,Bash,Zsh,当我在bash终端中执行set时,我看到了很多其他东西,但我不知道这些是在哪里定义的: BASH=/usr/local/bin/zsh SHELL=/usr/local/bin/zsh 由于我已经卸载了zsh,我希望确保应用程序没有读取这些环境变量,并尝试使用zsh。我注意到Sublime Text 3会产生错误,因为它读取SHELL环境变量 我已经检查了~/.bashrc和~/.bash_profile,但是它们中没有定义这些环境变量 检查Terminal.app的设置时,它被设置为使用/b

当我在bash终端中执行
set
时,我看到了很多其他东西,但我不知道这些是在哪里定义的:

BASH=/usr/local/bin/zsh
SHELL=/usr/local/bin/zsh
由于我已经卸载了zsh,我希望确保应用程序没有读取这些环境变量,并尝试使用zsh。我注意到Sublime Text 3会产生错误,因为它读取
SHELL
环境变量

我已经检查了
~/.bashrc
~/.bash_profile
,但是它们中没有定义这些环境变量

检查Terminal.app的设置时,它被设置为使用
/bin/bash

这些环境变量是在哪里定义的?

SHELL
(就像
HOME
USER
LOGNAME
)是从用户数据库中登录SHELL(主目录和用户名)的值设置的

在OSX上,您可以使用以下命令从用户数据库中读取登录shell的值:

dscl localhost -read Local/Default/Users/$USER UserShell
在大多数其他类似Unix的操作系统上,您可以使用

getent passwd $USER
其中最后一个(冒号分隔)字段通常表示登录shell

要更改
SHELL
,您需要更改登录SHELL。这可以通过
chsh
实用程序实现。例如,如果要将其设置为
bash
,可以使用

chsh -s /bin/bash
更改将在下次登录时生效(仅关闭并重新打开终端窗口是不够的)。
请注意,需要给出shell的完整路径,并且必须在
/etc/shells
中列出该路径


BASH
由BASH本身设置,应该扩展到用于运行当前
BASH
实例的绝对路径


在您的案例中,它扩展为
/usr/local/bin/zsh
,这让我怀疑它是
/bin/bash
的链接或复制版本。我建议在更改登录shell并确认更改生效后删除该链接/文件。

检查
shell
由设置
BASH
是由设置的。@123不,这在这里是个麻烦事。@tripleee在登录后仍然可以在这些文件中的任何一个中设置。shell的启动文件不涉及在这里设置任何一个变量。如果他们要推翻合理的默认值,这可能是一个严重的问题,因此我认为反对意见纯粹是理论上的。