OS X中定义的环境变量SHELL和BASH在哪里?

时间:2016-10-12 06:20:12

标签: 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的设置时,它设置为使用/bin/bash

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

1 个答案:

答案 0 :(得分:1)

SHELL(就像HOMEUSERLOGNAME)是根据用户数据库中的登录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后删除该链接/文件,确认更改生效。