如何在Mac上设置我的默认shell?

Léo*_* 준영 175 macos terminal fish

我不喜欢每次开始终端时重新输入鱼.我想fish默认.如何在Mac上将fish shell设置为我的默认shell?

use*_*339 231

1. sudo nano/etc/shells 在此输入图像描述

2.将/ usr/local/bin/fish添加到shell列表中 在此输入图像描述

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

  • 如果你没有root,这将无法工作 (7认同)
  • 并且您应该在Terminal.app的设置中更改“ Shell open with:Default login shell”。 (2认同)

Aif*_*Aif 74

您可以使用chsh来更改用户的shell.

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

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

如联机帮助页和Lorin所述,如果操作系统不知道shell,则必须将其添加到已知列表中:/etc/shells.

  • 尝试并获得`chsh:/ usr/local/bin/fish:非标准shell`解决方案是将其添加到/ etc/shells中,如下面的@ lorin-hochstein回答所述 (12认同)

Pao*_*tti 67

从航站楼:

  1. 添加鱼/etc/shells,需要管理密码:

    sudo echo /usr/local/bin/fish >> /etc/shells
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使Fish成为您的默认shell chsh:

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

从系统偏好设置:

  1. 用户和组→按住Ctrl键单击当前用户→高级选项...

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

    登录shell

  3. 按确定,再次注销

  • 不得不对第1步进行轻微调整. - `sudo sh -c'echo/usr/local/bin/fish >>/etc/shells'` (6认同)
  • 过去是通过终端方式执行此操作,但在最近的 macOS 升级中,/etc/shells 被重置。将来可能最好使用系统偏好设置方式。 (2认同)

Tus*_*ani 27

这些适用于MacOS Sierra 10.12.5(16F73)以及可能的其他一些近期和即将推出的MacOS版本.

  1. chsh不足以更改默认shell.确保在终端打开时按Command+ ,,并将"打开的方框"选项更改为"默认登录shell".

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

  • 由于这个答案是被接受的答案,也许不是它可能是[另一个答案](/sf/answers/31728721/)的附录,你可以把它作为包含附录的完整答案. (2认同)

Lor*_*ein 20

这是另一种方法:

假设您使用MacPorts安装它,可以通过执行以下操作来完成:

sudo port install fish
Run Code Online (Sandbox Code Playgroud)

你的shell将位于/opt/local/bin/fish.

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

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


hat*_*gic 13

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


qua*_*ntm 11

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

  1. 首先,我不得不在/etc/shells文件中添加鱼

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

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

只有在我完成了所有这三件事后,鱼才开始弹出作为新终端窗口的默认设置.


Gum*_*mbo 9

Mac OS X:如何更改终端shell

  • 我建议更喜欢这种方法而不是更改默认的OSX shell.我在iWorks上有"无限安装" - 例如 - 因为安装脚本假设你有一个SH兼容的shell(在我的情况下不是ZSH的情况). (2认同)

小智 8

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

brew install zsh
sudo sh -c "echo $(which zsh) >> /etc/shells"
chsh -s $(which zsh)
Run Code Online (Sandbox Code Playgroud)


Bla*_*ack 7

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

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


小智 6

Terminal.app > Preferences> General> Shells open with:>/bin/fish

  1. 打开您的终端,然后按command+ ,(逗号)。这将打开一个首选项窗口。
  2. 第一个标签是“常规”。
  3. 找到“外壳打开方式”设置,然后选择第二个选项,该选项需要完整的外壳路径。
  4. 将链接粘贴到您的fish命令(通常为)/usr/local/bin/fish

请参阅此屏幕快照,该屏幕快照zsh被设置为默认屏幕截图。

在Terminal.app首选项中输入<code> / bin / zsh </ code>的屏幕截图

我正在使用macOS Sierra。在macOS Mojave中也可以使用。

  • 终于!适用于非 sudo 用户的解决方案! (2认同)

Bru*_*sky 6

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

brew install bash
which bash | sudo tee -a /etc/shells
chsh -s $(which bash)
Run Code Online (Sandbox Code Playgroud)

然后你就可以得到 Vim 风格的 tab 补全了,它只在 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"
Run Code Online (Sandbox Code Playgroud)


Rob*_*ari 5

这对我全新安装的Mac OS X v10.12 (Sierra)有用

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

    sudo chown $(whoami) /etc/shells
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将鱼添加到文件/etc/shells

    sudo echo /usr/local/bin/fish >> /etc/shells
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用chshFish设为默认 shell

    chsh -s /usr/local/bin/fish
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将 root 重新定义为 shell 的所有者

    sudo chown root /etc/shells
    
    Run Code Online (Sandbox Code Playgroud)