【发布时间】:2010-10-01 23:31:51
【问题描述】:
我不喜欢每次启动终端时都重新输入fish。我希望Fish 默认开启。如何将 Fish shell 设置为 Mac 上的默认 shell?
【问题讨论】:
我不喜欢每次启动终端时都重新输入fish。我希望Fish 默认开启。如何将 Fish shell 设置为 Mac 上的默认 shell?
【问题讨论】:
1. sudo nano /etc/shells
2。将 /usr/local/bin/fish 添加到您的 shell 列表中
3. chsh -s /usr/local/bin/fish
【讨论】:
Shell open with: Default login shell
从终端:
将 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
按确定,退出并重新登录
【讨论】:
sudo sh -c 'echo /usr/local/bin/fish >> /etc/shells'
echo /usr/local/bin/fish | sudo tee -a /etc/shells
您可以使用chsh 更改用户的shell。
运行以下代码,例如,将您的 shell 更改为 Zsh
chsh -s /bin/zsh
如手册中和 Lorin 所述,如果操作系统不知道 shell,您必须将其添加到其已知列表中:/etc/shells。
【讨论】:
chsh: /usr/local/bin/fish: non-standard shell 解决方案是将其添加到 /etc/shells 中,如下面的@lorin-hochstein 回答所述
-s)。我很快会再试一次。
这些适用于 macOS v10.12.5 (Sierra) (16F73) 以及可能其他一些最近和即将推出的 macOS 版本。
chsh 不足以更改默认 shell。确保在终端打开时按 Command + , 并将“Shell open with”选项更改为“Default login shell”。
如果是 Bash,请确保执行 echo $BASH_VERSION 以确认您正在运行预期版本的 Bash。 bash --version 没有给你正确的信息。
【讨论】:
Preferences 中设置默认 shell。请参阅 Pankaj 的 this Answer。
这是另一种方法:
假设您使用MacPorts 安装它,可以这样做:
sudo port install fish
您的 shell 将位于 /opt/local/bin/fish。
您需要告诉 OS X 这是一个有效的 shell。为此,请将此路径添加到 /etc/shells 文件的末尾。
完成此操作后,您可以通过转到系统偏好设置 → 帐户来更改外壳。单击锁定以允许更改。右键单击该帐户,然后选择“高级选项...”。在“登录 shell” 字段中,添加 Fish 的路径。
【讨论】:
查看此屏幕截图,其中zsh 被设置为默认值。
我正在使用macOS v10.12 (Sierra)。它也适用于macOS v10.14 (Mojave)。
【讨论】:
唯一对我有用的是所有这些方法的组合。
首先我必须将 Fish 可执行文件的路径添加到 /etc/shells 文件中
然后我跑了chsh -s /usr/local/bin/fish
最后,我输入了 Command + , 并将/usr/local/bin/fish 添加到那里的默认路径
只有在我完成了所有三件事之后,Fish 才开始作为新终端窗口的默认弹出窗口。
【讨论】:
在 macOS v10.14 (Mojave) 上,我必须执行以下操作(以 Z shell (zsh) 为例):
brew install zsh
sudo sh -c "echo $(which zsh) >> /etc/shells"
chsh -s $(which zsh)
【讨论】:
zsh。已经出现在 macOS Mojave 上。捆绑在 Mojave 上,默认在 Catalina 上。
如何在现代 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"
【讨论】:
这项工作对我来说是全新安装 Mac OS X v10.12 (Sierra):
【讨论】:
chsh 程序可让您更改默认 shell。它需要可执行文件的完整路径,所以如果你的 shell 是 Fish,那么它会希望你提供在你输入 which fish 时给出的输出。
您会看到以“Shell:”开头的行。如果您从未编辑过它,它很可能会显示“Shell: /bin/bash”。将 /bin/bash 路径替换为所需 shell 的路径。
【讨论】:
在Terminal 中时,使用Command+, 打开终端首选项。
在常规选项卡上,Shells open with:从 Default login shell 更改为 Command:
并使用/bin/fish
【讨论】:
使用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 中的写入命令)。
【讨论】:
如果您在使用其他方式时遇到问题,以下方法适用于 macOS v10.14 (Mojave),但通常应该可以。
which fish
将输出路径添加到System Preferences → Users & Groups → 右击user,Advanced Options。将 which 的结果粘贴到归档的 "Login shell:" 中。
【讨论】:
fish检查是否安装正确,如果安装正确,输入exit
which fish,复制路径。sudo sh -c 'echo <your-fish-path-here> >> /etc/shells'
chsh -s <your-fish-path-here>
【讨论】:
fish添加到/etc/shells(b)chsh。
/opt/homebrew/bin/fish
bash 和 zsh 也提到使用 which 找到正确的位置。有了其他 18 个答案,信息几乎不可能被多次复制;-)
要更改 Mac 上的默认 shell,请运行以下命令:
chsh -s <name-of-shell>
您可以选择的 shell 列表是:
因此,如果您想从 /bin/zsh shell 更改,您的命令将如下所示:
chsh -s /bin/zsh
您可以通过运行以下命令查看系统上所有可用的 shell:
cat /etc/shells
【讨论】:
编辑文件.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
【讨论】: