如何在Mac OS X上(在iTerm中)将zsh作为登录shell运行?

Iva*_*sov 146 macos bash shell zsh

当zsh在Mac OS X上设置为登录shell时,当它由iTerm启动时,zsh不会认为它是作为登录shell运行的,尽管它以'-zsh'开头(' - '作为arg [0]的第一个字符,它应该意味着它应该作为登录shell启动.

因此,当我将登录shell设置为bash时,bash在$ 0中首先识别出这个' - '并作为登录shell运行,但是zsh不会,尽管它似乎应该.

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

Dam*_*son 221

chsh -s $(which zsh)
Run Code Online (Sandbox Code Playgroud)

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

  • 如果`chsh`告诉你类似"非标准shell"的东西,则意味着你必须将新shell的路径添加到`/ etc/shells`.例如,如果您正在更改由homebrew安装的zsh版本,将其置于`/ usr/local/bin/zsh`中,则会发生这种情况. (45认同)
  • 他的回答确实让zsh在iTerm的Mac OS X上作为登录shell运行.它只是不按照你描述的方式去做.但它解决了你提出的问题(在标题中,而不是在正文中).你在身体中结束的问题是一个完全不同的问题.如果这是你真正的问题(而不是如何使zsh作为登录shell运行)那么你可能应该在标题中改写问题. (11认同)
  • 请先阅读问题。问题不在于设置默认外壳程序,而是zsh未检测到它是作为登录外壳程序启动的。 (2认同)

Har*_*man 101

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

/ bin/zsh --login

  • 它是"配置文件"选项卡上的常规选项卡. (6认同)
  • 为什么我们要通过命令选项传递 `--login` 标志而不是选择 `Login shell` 选项? (3认同)
  • 或者在我的情况下`/ usr/local/bin/zsh --login` (2认同)

Aru*_*mar 58

转到系统偏好设置用户和组窗格- >选择用户 - > 单击锁定进行更改(左下角) - >右键单击当前用户选择高级选项... - >选择登录Shell:/bin/zsh和OK

  • 这节省了我的一天.我是osx mavericks. (3认同)

has*_*ain 20

在启动时更改shell的命令是chsh -s <path_to_shell>.mac OS X中的默认shell安装在bin目录中,因此如果要更改为默认值,zsh则可以使用以下命令

chsh -s /bin/zsh
Run Code Online (Sandbox Code Playgroud)

如果您使用的是不同版本,zsh则可能必须添加该版本/etc/shells以避免非标准shell消息.例如,如果你想要home-brew的版本,zsh你必须添加/usr/local/bin/zsh上述文件,你可以在一个命令中执行sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells",然后运行

chsh -s /usr/local/bin/zsh
Run Code Online (Sandbox Code Playgroud)

或者,如果您想在一个命令中执行整个操作,只需复制并粘贴此选项(如果已安装zsh)

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh
Run Code Online (Sandbox Code Playgroud)

  • 我认为拒绝这个答案是不公平的。道具,因为它是答案本身中唯一提及`/ etc / shells`的道具。 (2认同)

Bri*_*new 19

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

转到"帐户"偏好设置,解锁,然后右键单击" 高级设置"对话框的用户帐户.你的shell应该是/ bin/zsh,你可以适当地编辑那个调用(即添加--login参数).

  • 我喜欢这样.我刚才用过这个答案,才意识到我差不多4年前写过这个答案! (7认同)