如何在Mac上设置默认的shell,例如Fish?

243

我不想每次打开终端都重新输入fish。我想让Fish shell成为默认选项。如何在Mac上设置Fish shell为默认shell?

18个回答

292

1. sudo nano /etc/shells enter image description here

2. 将/usr/local/bin/fish添加到您的shell列表中 enter image description here

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


3
你需要在Terminal.app的设置中更改“Shell打开方式:默认登录Shell”。 - Tikhonov Aleksandr

107

从终端操作:

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

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

    chsh -s /usr/local/bin/fish
    

从“系统偏好设置”中:

  1. 用户与群组 → 对当前用户进行 ctrl-单击 → 高级选项...

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

    登录 shell

  3. 点击“确定”,注销并重新登录


10
必须对步骤1进行轻微修改:- sudo sh -c 'echo /usr/local/bin/fish >> /etc/shells' - purpletonic
1
只是另一种做相同事情的方式,就像 @purpletonic 提到的 echo /usr/local/bin/fish | sudo tee -a /etc/shells - mroach
1
以前是通过终端来完成,但最近一次 macOS 升级后,/etc/shells 被重置了。未来最好使用系统偏好设置的方式。 - vin047

84

你可以使用chsh来更改用户的shell。

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

chsh -s /bin/zsh

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


19
尝试更改shell时出现了 chsh: /usr/local/bin/fish: non-standard shell 的报错。解决方法是按照 @lorin-hochstein 的回答,将其添加到 /etc/shells 文件中。 - lmsurprenant
dbright@PowerMac:$ chsh -s /Users/dbright/sys/bin/bash 正在更改 dbright 的 shell。 dbright 的密码: chsh:/Users/dbright/sys/bin/bash:非标准 shell dbright@PowerMac:$ ls -l /etc/shells -rw-r--r-- 1 root wheel 179 Sep 23 2007 /etc/shells - don bright
嗯,最近我尝试了chsh,作为一个简单的用户是可以使用的(虽然没有使用“-s”选项)。我很快会再试一次。 - Aif

41

以下内容适用于macOS v10.12.5 (Sierra) (16F73)以及可能的其他近期和即将发布的macOS版本。

  1. chsh 并不能足以更改默认shell。请确保您在终端打开时按下 Command + , 并将“以默认登录shell方式打开”的选项更改为“Default login shell”。

  2. 对于Bash,请确保执行 echo $BASH_VERSION 以确认运行所需版本的Bash。 bash --version 并不能给出正确的信息。


现在文档中已经回答了这个问题。文档链接 - reergymerej
1
更新:我们现在可以在Terminal.app的“首选项”中设置默认shell。请参见Pankaj的此答案 - Basil Bourque
我已经提到了偏好设置的键盘快捷键。 - Tushar Vazirani

21

以下是另一种方法:

假设您是使用 MacPorts 进行安装的,可以通过以下方式完成安装:

sudo port install fish

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

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

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


谢谢!这个方法很好用,让 Fish 成为了我所有终端的默认终端。像其他答案中所说的在终端中更改默认终端会导致每次关闭窗口时终端提示我,而使用 chsh 命令对我来说也不起作用。 - jasongregori
使用 macports 安装完成后,请按照 port notes fish 的说明进行操作。目前,说明中指出需要执行 sudo chpass -s /opt/local/bin/fish ${USER} 命令。 - Y. E.

13

Terminal.app偏好设置常规使用Shell打开/bin/fish

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

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

在Terminal.app偏好设置中输入/bin/zsh的屏幕截图

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


2
终于!一个适用于非sudo用户的解决方案! - Ébe Isaac

12

对我有用的唯一方法是将所有这些方法结合起来使用。

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

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

  3. 最后,我键入 Command + , 并在默认路径中添加/usr/local/bin/fish

只有在完成这三件事之后,Fish才会成为新终端窗口的默认选项。


11
  • 输入fish检查是否已经正确安装,如果已正确安装,请输入exit
  • 输入which fish,复制该路径。
  • 输入sudo sh -c 'echo <your-fish-path-here> >> /etc/shells'
  • 重启你的终端
  • 输入chsh -s <your-fish-path-here>
  • 再次重启终端
  • 现在应该可以正常工作了。

这与此答案此答案此答案此答案有何不同?所有这些答案本质上都是(a)将fish添加到/etc/shells中,(b)chsh - NotTheDr01ds
@NotTheDr01ds 那些对我都不起作用,因为我的 fish shell 路径不同,是 /opt/homebrew/bin/fish - Ash Singh
这个问题已经在多个答案中得到了解决 - 这个是专门针对Fish shell的,但其他3个答案也提到了在bashzsh中使用which来找到正确的位置。加上其他18个答案,几乎不可能信息没有被重复多次了 ;-) - NotTheDr01ds
1
适用于最新的M1 iTerm :) 谢谢 - Ivan Aracki
是的,这个解决方案对我也有效(其他的不行)。 - sabiland

8
macOS v10.14(Mojave)上,我需要执行以下步骤(以使用Z shellzsh)为例):
brew install zsh
sudo sh -c "echo $(which zsh) >> /etc/shells"
chsh -s $(which zsh)

注意:您也可以使用此方法获取最新版本的bash。https://dev59.com/C3RB5IYBdhLWcg3w9b59#55011144 我自己也几乎想出了完全相同的代码。 - Bruno Bronosky
1
无需安装 zsh。它已经存在于 macOS Mojave 上。在 Mojave 中捆绑,是 Catalina 的默认选项。 - Basil Bourque

7

HomebrewM1 Mac上应该使用/opt/homebrew而不是/usr/local

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接