当我在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
。
这些环境变量在哪里定义?
答案 0 :(得分:1)
SHELL
(就像HOME
,USER
,LOGNAME
)是根据用户数据库中的登录shell(主目录和用户名)的值设置的。 / p>
在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后删除该链接/文件,确认更改生效。