如何在 Mac 上设置我的默认 shell,例如钓鱼? [关闭]

Posted

技术标签:

【中文标题】如何在 Mac 上设置我的默认 shell,例如钓鱼? [关闭]【英文标题】:How can I set my default shell on a Mac, e.g. to Fish? [closed] 【发布时间】:2010-10-01 23:31:51 【问题描述】:

我不喜欢每次启动终端时都重新输入fish。我希望Fish 默认开启。如何将 Fish shell 设置为 Mac 上的默认 shell?

【问题讨论】:

【参考方案1】:

1. sudo nano /etc/shells

2。将 /usr/local/bin/fish 添加到您的 shell 列表中

3. chsh -s /usr/local/bin/fish

【讨论】:

你应该在 Terminal.app 的设置中更改Shell open with: Default login shell【参考方案2】:

从终端:

    将 Fish 添加到 /etc/shells,这将需要管理密码:

    sudo echo /usr/local/bin/fish >> /etc/shells
    

    使用 chsh 将 Fish 设为您的默认 shell:

    chsh -s /usr/local/bin/fish
    

来自系统偏好设置:

    用户和组 → ctrl-click on Current User → Advanced Options...

    将登录外壳更改为/usr/local/bin/fish

    按确定,退出并重新登录

【讨论】:

必须对第 1 步进行微调。-sudo sh -c 'echo /usr/local/bin/fish >> /etc/shells' 只是另一种做同样事情的方式@purpletonic提到echo /usr/local/bin/fish | sudo tee -a /etc/shells 曾经以终端方式执行此操作,但在最近的 macOS 升级中,/etc/shells 已重置。将来可能最好使用系统偏好设置。【参考方案3】:

您可以使用chsh 更改用户的shell。

运行以下代码,例如,将您的 shell 更改为 Zsh

chsh -s /bin/zsh

如手册中和 Lorin 所述,如果操作系统不知道 shell,您必须将其添加到其已知列表中:/etc/shells

【讨论】:

尝试并得到了chsh: /usr/local/bin/fish: non-standard shell 解决方案是将其添加到 /etc/shells 中,如下面的@lorin-hochstein 回答所述 dbright@PowerMac:~$ chsh -s /Users/dbright/sys/bin/bash 更改 dbright 的 shell。 dbright 的密码:chsh: /Users/dbright/sys/bin/bash: non-standard shell dbright@PowerMac:~$ ls -l /etc/shells -rw-r--r-- 1 root wheel 179 Sep 23 2007 /etc/shells 嗯,我最近尝试了 chsh,它作为一个简单的用户工作(虽然没有 -s)。我很快会再试一次。【参考方案4】:

这些适用于 macOS v10.12.5 (Sierra) (16F73) 以及可能其他一些最近和即将推出的 macOS 版本。

    chsh 不足以更改默认 shell。确保在终端打开时按 Command + , 并将“Shell open with”选项更改为“Default login shell”。

    如果是 Bash,请确保执行 echo $BASH_VERSION 以确认您正在运行预期版本的 Bash。 bash --version 没有给你正确的信息。

【讨论】:

现在在the docs 中回答。 更新:我们现在可以在 Terminal.appPreferences 中设置默认 shell。请参阅 Pankaj 的 this Answer。 我已经提到了偏好设置的键盘快捷键。【参考方案5】:

这是另一种方法:

假设您使用MacPorts 安装它,可以这样做:

sudo port install fish

您的 shell 将位于 /opt/local/bin/fish

您需要告诉 OS X 这是一个有效的 shell。为此,请将此路径添加到 /etc/shells 文件的末尾。

完成此操作后,您可以通过转到系统偏好设置帐户来更改外壳。单击锁定以允许更改。右键单击该帐户,然后选择“高级选项...”。在“登录 shell” 字段中,添加 Fish 的路径。

【讨论】:

谢谢!这很好用,让 fish 成为我随处可见的默认终端。只是在终端中更改它,就像其他答案之一一样,每次我关闭窗口时终端都会提示我,而 chsh 对我不起作用。【参考方案6】:

Terminal.appPreferencesGeneralShell 打开方式/bin/fish

    打开终端并按 command + ,(逗号)。这将打开一个首选项窗口。 第一个选项卡是“常规”。 找到“Shells open with”设置并选择需要完整路径的第二个选项。 将链接粘贴到您的 fish 命令,通常是 /usr/local/bin/fish

查看此屏幕截图,其中zsh 被设置为默认值。

我正在使用macOS v10.12 (Sierra)。它也适用于macOS v10.14 (Mojave)。

【讨论】:

终于!适用于非 sudo 用户的解决方案!【参考方案7】:

唯一对我有用的是所有这些方法的组合。

    首先我必须将 Fish 可执行文件的路径添加到 /etc/shells 文件中

    然后我跑了chsh -s /usr/local/bin/fish

    最后,我输入了 Command + , 并将/usr/local/bin/fish 添加到那里的默认路径

只有在我完成了所有三件事之后,Fish 才开始作为新终端窗口的默认弹出窗口。

【讨论】:

【参考方案8】:

在 macOS v10.14 (Mojave) 上,我必须执行以下操作(以 Z shell (zsh) 为例):

brew install zsh
sudo sh -c "echo $(which zsh) >> /etc/shells"
chsh -s $(which zsh)

【讨论】:

注意:您也可以使用这种确切的方法来获取最新版本的 bash。 ***.com/a/55011144/117471我自己想出了几乎完全相同的代码。 无需安装zsh。已经出现在 macOS Mojave 上。捆绑在 Mojave 上,默认在 Catalina 上。【参考方案9】:

如何在现代 macOS 上获取最新版本的 Bash(在 macOS v10.14 (Mojave) 上测试)。

brew install bash
which bash | sudo tee -a /etc/shells
chsh -s $(which bash)

然后你准备好get Vim-style tab completion,它只在 Bash >= 4 上可用(Homebrew 中的当前版本是 5.0.2):

# If there are multiple matches for completion, Tab should cycle through them
bind 'TAB':menu-complete

# Display a list of the matching files
bind "set show-all-if-ambiguous on"

# Perform partial completion on the first Tab press,
# only start cycling full results on the second Tab press
bind "set menu-complete-display-prefix on"

【讨论】:

【参考方案10】:

这项工作对我来说是全新安装 Mac OS X v10.12 (Sierra):

    定义当前用户为shell的所有者

    sudo chown $(whoami) /etc/shells
    

    将鱼添加到文件 /etc/shells

    sudo echo /usr/local/bin/fish >> /etc/shells
    

    使用 chsh

    将 Fish 设为您的默认 shell
    chsh -s /usr/local/bin/fish
    

    将root重新定义为shell的所有者

    sudo chown root /etc/shells
    

【讨论】:

【参考方案11】:

chsh 程序可让您更改默认 shell。它需要可执行文件的完整路径,所以如果你的 shell 是 Fish,那么它会希望你提供在你输入 which fish 时给出的输出。

您会看到以“Shell:”开头的行。如果您从未编辑过它,它很可能会显示“Shell: /bin/bash”。将 /bin/bash 路径替换为所需 shell 的路径。

【讨论】:

【参考方案12】:

Terminal 中时,使用Command+, 打开终端首选项。

在常规选项卡上,Shells open with:从 Default login shell 更改为 Command: 并使用/bin/fish

【讨论】:

“设置自动启动命令fish”是什么意思?你能详细说明/澄清吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。 这是一个太旧的答案,可能已经过时了,我现在用 macOS Big Sur 11.4 更新它。【参考方案13】:

使用dscl:

heimdall:~ leeg$ dscl
Entering interactive mode... (type "help" for commands)
 > cd /Local/Default/Users/
/Local/Default/Users > read <<YOUR_USER>>
[...]
UserShell: /bin/bash
/Local/Default/Users >

只需更改该值(使用dscl 中的写入命令)。

【讨论】:

运行 read leeg 时出现此错误: DS 错误:-14136 (eDSRecordNotFound) 是的。那是因为 leeg 是 我的 用户名,而不是你的 :P【参考方案14】:

M1 上的Homebrew Mac 应该使用/opt/homebrew 而不是/usr/local

您可以查看Fish 位置which fish。对我来说,Fish 位于 /opt/homebrew/bin/fish,这是我添加到 etc/shells 的位置。

【讨论】:

【参考方案15】:

如果您在使用其他方式时遇到问题,以下方法适用于 macOS v10.14 (Mojave),但通常应该可以。

which fish

将输出路径添加到System PreferencesUsers & Groups → 右击userAdvanced Options。将 which 的结果粘贴到归档的 "Login shell:" 中。

【讨论】:

【参考方案16】: 输入fish检查是否安装正确,如果安装正确,输入exit 输入which fish,复制路径。 输入sudo sh -c 'echo &lt;your-fish-path-here&gt; &gt;&gt; /etc/shells' 重启终端 输入chsh -s &lt;your-fish-path-here&gt; 再次重启终端 现在应该可以工作了。

【讨论】:

这与this answer、this answer、this answer 或this answer 有何不同?所有这些本质上都是(a)将fish添加到/etc/shells(b)chsh @NotTheDr01ds 这些都不适合我,因为我的鱼壳路径不同,/opt/homebrew/bin/fish 这也包含在多个答案中 - This one 专门针对 Fish shell,但另外 3 个针对 bashzsh 也提到使用 which 找到正确的位置。有了其他 18 个答案,信息几乎不可能被多次复制;-) @NotTheDr01ds 仍然是一个不完整的答案。不知道你为什么会痒,伙计。放轻松,伙计。【参考方案17】:

要更改 Mac 上的默认 shell,请运行以下命令:

chsh -s <name-of-shell>

您可以选择的 shell 列表是:

    /bin/bash /bin/csh /bin/dash /bin/ksh /bin/sh /bin/tcsh /bin/zsh

因此,如果您想从 /bin/zsh shell 更改,您的命令将如下所示:

chsh -s /bin/zsh

您可以通过运行以下命令查看系统上所有可用的 shell:

cat /etc/shells

【讨论】:

Re "chsh -s ":不应该是"chsh -s "*?【参考方案18】:

编辑文件.zshrc并将其更改为

exec /bin/bash

或者你可能喜欢的任何外壳。

奖励:这不需要 root 访问权限,并且适用于所有 OS X 版本。

唯一的问题是它不以这种方式读取文件.bash_profile;只有当 Bash 作为交互式登录 shell 运行时才会读取它。您必须将它从文件 .bashrc 中包含在内,如下所示:

if [[ "$OSTYPE" == "darwin"* ]]; then
    #local hack on osx.
    if [[ -f $HOME/.bash_profile ]]; then
      . $HOME/.bash_profile
    fi
fi

另外:osx 自带的 bash 版本有点过时,最好用brew install bash 安装最新版本的bash;在这种情况下,您的 .zshrc 文件应该运行正确的 bash 版本。目前是

exec /usr/local/Cellar/bash/5.1.8/bin/bash

【讨论】:

以上是关于如何在 Mac 上设置我的默认 shell,例如钓鱼? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我的鱼瞎了? (在 Mac OS Big Sur、M1 Mac 上将其设置为默认 shell 后,fish 无法识别任何命令)

Mac 设置默认 Shell

如何在我的 Mac 中将 Xcode 版本设置为默认版本?

sh 将Fish设置为Mac OS X上的默认shell

Mac安装mysqlclient

如何在 Unix 控制台或 Mac 终端上运行 shell 脚本?