如何使 zsh 作为登录 shell 在 MacOSX 上运行(在 iTerm 中) ?

当 zsh 在 Mac OS X 上被设置为一个登录 shell 时,当它由 iTerm 启动时,zsh 并不认为它是作为一个登录 shell 运行的,尽管它以‘-zsh’(‘-’作为 arg [0]的第一个字符)启动,这意味着它应该以一个登录 shell 启动。

因此,当我将登录 shell 设置为 bash 时,bash 识别出 $0中的第一个“-”,并作为登录 shell 运行,但 zsh 没有这样做,尽管它似乎应该这样做。

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

152548 次浏览

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

转到 Account 首选项,取消锁定,然后右键单击 高级设置对话框中的用户帐户。您的 shell 应该是/bin/zsh,您可以适当地编辑该调用(即添加—— login 参数)。

chsh -s $(which zsh)

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

在 iTerm-> Preferences-> Profiles Tab-> General section set Command to:/bin/zsh —— login

/bin/zsh --login

使用 login实用程序创建登录 shell。假设要登录的用户的用户名为 爱丽丝,并且 zsh 安装在 /opt/local/bin/zsh中(例如,通过 MacPorts 安装的最新版本)。在 iTerm 2中,转到 Preferences,Profiles,选择要设置的配置文件,然后在 命令中输入:

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

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

转到 < em > 系统设置 < em > 用户及组别 面板-> 选择用户-> 单击锁定进行更改(左下角)-> 右击当前用户选择 高级选项..-> 选择 < em > 登入外壳: /bin/zsh 和 好的

在启动时更改 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