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


149

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

因此,当我将登录shell设置为bash时,bash会识别$ 0中的第一个'-'并作为登录shell运行,但zsh不会,尽管看起来应该如此。

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


2
我知道自从被问到已经有一段时间了,但是请考虑接受@Harold Putman的回答。它是唯一解决所问问题的方法。
Craig S. Cottingham

Answers:


106

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

/ bin / zsh-登录


1
iterm2在“常规”选项卡中似乎没有此选项。任何想法如何在不更改登录Shell的情况下在iterm2中实现?
Lloyd Dewolf 2014年

6
它是“个人资料”标签上的“常规”标签。
Harold Putman

啊哈!既有“常规”选项卡又有“配置文件”>“常规”,这令人困惑。
Lloyd Dewolf 2014年

2
或者以我/usr/local/bin/zsh --login
为例

我使用它来更改我的外壳程序,而不是编辑/ etc / shells,因为这样可以防止我的外壳程序在更新后变得无法使用的问题。
萨尔

220
chsh -s $(which zsh)

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


2
请先阅读问题。问题不在于设置默认外壳程序,而是zsh未检测到它是作为登录外壳程序启动的。
伊万·塔拉索夫

1
啊,很抱歉。您是否尝试使用-i标志强制zsh以交互方式启动?
Damien Wilson

11
他的回答确实使zsh在iTerm中作为Mac OS X上的登录shell运行。它只是不会按照您描述的方式去做。但这可以解决您提出的问题(标题而不是正文)。您在体内遇到的问题是一个完全不同的问题。如果这是您的真正问题(而不是如何使zsh作为登录Shell运行),那么您也许应该在标题中重新输入该问题。
iconoclast

45
如果chsh告诉您“非标准外壳”之类的信息,则意味着您必须将新外壳的路径添加到/etc/shells。例如,如果您要更改为homebrew安装的zsh版本,并将其放入,则会发生这种情况/usr/local/bin/zsh
shovavnik 2014年

1
chsh -s $(which zsh)可用于确保正确的路径。
Daniel Doezema 2014年

56

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


3
这挽救了我的一天。我在osx特立独行者上。
2014年

这适用于默认zsh,不适用于brew安装的zsh。
伊玛目·布克斯

19

启动时更改外壳程序的命令是chsh -s <path_to_shell>。Mac OS X中的默认外壳安装在该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

2
我认为拒绝这个答案是不公平的。道具,因为它是/etc/shells答案本身中唯一提及的道具。
heymatthew '16

1
@heymatthew被拒绝的原因是因为它没有回答所提出的问题。它回答了一个完全不同的无关问题。
塔比莎

17

您是否尝试过在帐户设置中编辑外壳程序条目

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


不幸的是,这行不通:我可以使用chsh设置我喜欢的任何外壳程序(只要我在/ etc / shells中列出了该外壳程序),但是无法将命令行参数添加到外壳程序的“高级”首选项对话框中(iTerm失败)启动外壳)。
伊万·塔拉索夫

OS X中的某些语法已更改,但要点是将您的默认shell设置为/ bin / zsh,如Brian上面指出的那样
EngineerDave

7
我很喜欢 我刚刚使用了这个答案,直到意识到我将近4年前写了它!
Brian Agnew

-2

使用该login实用程序创建登录外壳。假设您要登录的用户具有用户名Alice,并且安装了zsh /opt/local/bin/zsh(例如,通过MacPorts安装的更新版本)。在iTerm 2中,转到“首选项”,“配置文件”,选择要设置的配置文件,然后在Command中输入:

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

有关man login更多信息,请参见。


这不是100%的答案。是的将默认更改您生成的外壳程序,但这不是如何创建外壳程序的“登录”实例的答案,即从头开始为所有变量提供资源。
塔比莎
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.