chsh不会更改$ SHELL


9

我在更改$SHELLOSX的iTerm应用程序的值时遇到一些困难。iTerm开始于/bin/zsh,但的值$SHELL似乎没有变化。

我所做的:

  1. /bin/zsh在iTerm的配置窗口中更改了“命令” 。
  2. 执行chsh以将shell更改为/bin/zsh
  3. 确认iTerm已启动于 /bin/zsh

注意#1:在OSX的库存终端应用程序“ Terminal.app”中:

echo $SHELL
/bin/zsh

注意2:在OSX受欢迎的终端应用程序“ iTerm.app”中:

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made

1
你进去了/etc/shells吗?该手册指出,如果您指定的外壳不在该文件中,则不会被视为标准外壳。
2014年

Answers:


5

问题是“ iTerm”应用程序与外壳的设置冲突。为解决此问题,我在iTerm首选项窗口中重置了“登录外壳”命令:

iTerm.app->首选项->配置文件->常规->命令->单击“登录外壳”

然后,我执行chsh将其修改为/bin/zsh

要重现该问题(/bin/bash/即使登录外壳为,也将$ SHELL设置为/bin/zsh),我只需要将“ iTerm”设置更改回“ Command:/ bin / zsh /”即可。


1

-s用于chsh尝试更改外壳程序的标志,并且可能由于Open Directory而失败:通常的UNIX系统'chsh'会修改该/etc/passwd条目。但是,我可以在chsh不带参数的情况下运行,这给了我一个编辑器以及以下信息:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

我能够将“ Shell:”条目编辑为/bin/zsh,随后打开带有Z-shell提示符的终端窗口。


我尝试chsh了没有参数。仍然没有运气。变量不变。实际上,在加载编辑器时,它显示/bin/zsh
melvynkim 2014年

尝试使用编辑器更改外壳。我截屏了从/ bin / tcsh到/ bin / zsh并返回的屏幕截图。 bonmot.ca/~nevin/chsh.mov
Nevin Williams

非常感谢您抽出宝贵的时间录制您的截屏视频!您的解决方案应该可以在其他终端仿真器上运行,但是我不愿意$SHELL在iTerm上进行更改。请参阅我的答案以获取详细信息。
melvynkim 2014年

1

在此处查找@ mklement0发布的有关bash升级问题的出色解释和解决方案。

我在系统(OS X 10.10.1)上执行相反的操作时遇到了类似的问题:bash安装后再次创建默认的登录Shell oh-my-zsh,这zsh是默认的,然后bash使用Homebrew从3.2.53 升级到4.3.30(苹果为什么要用旧bash版本运送优胜美地?)。

我觉得SHELL环境变量反映但控制用户的实际的默认登录shell。例如,如果bash是默认设置,bash然后从终端打开一个新的外壳窗口,$ export SHELL="/bin/zsh"; echo "$SHELL"则将显示/bin/zsh但不会发生实际更改,因为如果从终端打开一个新的外壳窗口,$ echo $0然后您将看到-bash$0包含名称和路径启动外壳程序窗口的命令(在本例中为)bash,并且其-旁边的命令表示它是登录外壳程序)。

正如@ mklement0指出的那样,该用户的实际默认登录Shell由UserShell系统内部数据库中用户记录中的属性控制-可以使用命令行实用程序查询和更新该属性dscl。当您打开外壳程序窗口时,此信息将传递到您的终端应用程序。

要做的chsh -s /bin/zsh就是将此UserShell属性更改为zsh-您可以在dscl . -read /Users/$USER/ UserShell之后立即进行检查,您将看到UserShell: /bin/zsh。但是更改不会在当前窗口中生效,除非您执行exec su - $USER@ mklement0建议的操作,或者关闭并打开Shell窗口。


0

尝试chsh -s /bin/zsh从默认的Mac终端执行命令:


1
这与OP有何不同?
JMY1000

@ JMY1000如果尝试从iTerm执行该命令,则更改不会反映出来。您应该能够通过从Mac的默认终端执行它来使其工作。
mohitmayank
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.