如何在 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.app 的Preferences
中设置默认 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.app → Preferences → General → Shell 打开方式 → /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 设为您的默认 shellchsh -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 时出现此错误: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 Preferences → Users & Groups → 右击user,Advanced Options。将 which
的结果粘贴到归档的 "Login shell:" 中。
【讨论】:
【参考方案16】: 输入fish
检查是否安装正确,如果安装正确,输入exit
输入which fish
,复制路径。
输入sudo sh -c 'echo <your-fish-path-here> >> /etc/shells'
重启终端
输入chsh -s <your-fish-path-here>
再次重启终端
现在应该可以工作了。
【讨论】:
这与this answer、this answer、this answer 或this answer 有何不同?所有这些本质上都是(a)将fish
添加到/etc/shells
(b)chsh
。
@NotTheDr01ds 这些都不适合我,因为我的鱼壳路径不同,/opt/homebrew/bin/fish
这也包含在多个答案中 - This one 专门针对 Fish shell,但另外 3 个针对 bash
和 zsh
也提到使用 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编辑文件.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 无法识别任何命令)