如何使zsh在Mac OS X(在iTerm中)作为loginshell运行?

当zsh在Mac OS X上被设置为loginshell时,当它由iTerm启动时,zsh并不认为它是作为loginshell运行的,虽然它是以'-zsh'(' – '作为arg [0]的第一个字符),它应该表示它应该作为loginshell启动。

所以,当我将loginshell设置为bash时,bash首先在$ 0中识别出这个“ – ”,并作为loginshell运行,但是zsh并没有这样做,尽pipe看起来应该如此。

有没有办法让zsh识别arg [0]中的' – ',或者让iTerm使用–login命令行参数运行shell?

chsh -s $(which zsh) 

系统会提示您input密码,但一旦更新了设置,您在该机器上启动的任何新的iTerm / Terminal会话将默认为zsh。

在iTerm中 – >首选项 – >configuration文件选项卡 – >常规部分将命令设置为:/ bin / zsh –login

/ bin / zsh  - 登录

进入系统偏好设置 – >select用户 – > 点击locking进行更改 (左下angular) – >右键单击当前用户select高级选项… – >selectloginshell: / bin / zsh和OK

您是否尝试过在帐户设置中编辑shell条目?

转到帐户首选项,解锁,并右键单击您的用户帐户的高级设置对话框。 你的shell应该是/ bin / zsh,你可以适当的编辑这个调用(即添加–login参数)。

在启动时更改shell的命令是chsh -s <path_to_shell> 。 Mac OS X中的默认shell安装在bin目录中,所以如果你想改变默认的zsh那么你可以使用下面的命令

 chsh -s /bin/zsh 

如果您使用的是不同版本的zsh那么您可能需要将该版本添加到/etc/shells以避免非标准的shell消息。 例如,如果你想家庭酿造的zsh版本,那么你必须添加/usr/local/bin/zsh到上面提到的文件,你可以在一个命令中做sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"然后运行

 chsh -s /usr/local/bin/zsh 

或者如果你想在一个命令中完成整个事情,只需要复制并粘贴,如果你已经安装了zsh

 sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh 

使用login实用程序创buildloginshell。 假设你想login的用户拥有用户名Alice ,并且zsh安装在/opt/local/bin/zsh (例如,通过MacPorts安装的更新版本)。 在iTerm 2中,转至“首选项”,“configuration文件”,select要设置的configuration文件,然后input命令

 login -pfq Alice /opt/local/bin/zsh 

有关选项的更多详细信息,请参阅man login