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

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

【问题讨论】:

    标签: macos terminal fish


    【解决方案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】:

    从终端:

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

      sudo echo /usr/local/bin/fish >> /etc/shells
      
    2. 使用 chsh 将 Fish 设为您的默认 shell:

      chsh -s /usr/local/bin/fish
      

    来自系统偏好设置:

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

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

    3. 按确定,退出并重新登录

    【讨论】:

    • 必须对第 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 版本。

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

    2. 如果是 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

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

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

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

    【讨论】:

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

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

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

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

    3. 最后,我输入了 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。 stackoverflow.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):

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

          sudo chown $(whoami) /etc/shells
          
        2. 将鱼添加到文件 /etc/shells

          sudo echo /usr/local/bin/fish >> /etc/shells
          
        3. 使用 chsh

          Fish 设为您的默认 shell
          chsh -s /usr/local/bin/fish
          
        4. 将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 answerthis answerthis answerthis 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 列表是:

                1. /bin/bash
                2. /bin/csh
                3. /bin/dash
                4. /bin/ksh
                5. /bin/sh
                6. /bin/tcsh
                7. /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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-06-17
                  • 1970-01-01
                  • 2013-01-18
                  • 1970-01-01
                  • 2022-07-05
                  • 2020-01-16
                  • 2017-11-30
                  • 2014-12-01
                  相关资源
                  最近更新 更多