在Mac OS X上从zsh切换到bash,然后再切回来?

324

我正在学习开发 Rails,并发现了 zsh 的强大之处。然而,在某些其他任务中,我希望使用普通的 bash

虽然它们是相同的,但在某些情况下我只是更喜欢 bash 的布局。

我如何在 zshbash 之间切换或启用和禁用 zsh

13个回答

630
你可以使用exec命令替换当前 shell 为新的 shell:
切换到bash
exec bash

切换到 zsh:

exec zsh

这不会影响新的终端窗口或任何东西,但很方便。


1
或者,只需调用zsh,完成后使用“exit”返回bash即可。执行它似乎是不必要和不希望的。 - Chris Page
一切取决于您退出终端窗口时希望它执行什么操作。我个人认为启动子shell是不必要且不理想的。 - larsks
3
如何更改默认设置?另外,在zsh中执行“exec bash”时,它不会调用我的bash_profile。 - Harshad Kale
1
有时候我想使用zsh,但有时它会干扰我的操作。来回设置默认值是个坏主意,所以这是完美的解决方案!赞! - Bob Roberts
1
但是,如果你运行 echo $SHELL,它会一直显示 /bin/zsh,这会导致意外的结果,比如MC的这个问题(bug 3580) - Pablo Bianchi
@kalehv chsh -s /bin/zsh 会更改默认shell。要执行任何可执行文件,包括你的 .bash_profile,请执行 . {filename} - barclay

240

你可以尝试使用 chsh -s /bin/bash 来将 bash 设置为默认项, 或者使用chsh -s /bin/zshzsh 设置为默认选项。

终端需要重新启动才能生效。


7
并不完全正确。可以简单地输入命令:“bash”或“zsh”来使用该Shell。 - Kevin C
我认为这在2022年已经不再适用了。 - user1034912

85

我在zsh和bash之间经常切换。 有一段时间,每次切换都必须重新调用我的bash_profile文件。 后来我发现你可以(通常)执行以下操作

exec bash --login
或者只是
exec bash -l

2
谢谢Phill,我安装了thoughtbot/laptop,但它搞乱了我的配置。你的提示帮助我恢复了我的bash环境。 - Seralto
3
你能否说明一下 "--login" 是干什么用的,这会很有帮助。 - Ewoks
1
使bash表现得像已被调用为登录shell一样(请参见下面的INVOCATION)。 - lony

22

如果只是暂时切换,可以像上面提到的那样使用exec命令,但对于更长期的解决方案。

你可以使用 chsh -s /bin/bash (切换到bash)和 chsh -s /bin/zsh (切换到zsh)


2
我的当前 shell 是 zsh,但是当我尝试运行 chsh -s /bin/bash 并输入密码时,它显示没有进行任何更改。 - Adhikansh Mittal
您可能需要注销并重新登录。或者,您可以重新启动电脑以应用此更改。 - naveejr

20

对于Bash,请尝试

chsh -s $(which bash)

对于zsh,请尝试

chsh -s $(which zsh)

8

在 Mac OS Catalina 中,默认的交互式 shell 是 zsh。要将 shell 从 bash 更改为 zsh:

chsh -s /bin/zsh

然后您需要输入Mac密码。退出终端并重新打开它。要检查是否成功更改为ssh,请输入以下命令。

echo $SHELL

如果结果是 /bin/zsh,则任务完成。
要将其改回bash,请在终端上输入以下命令。
chsh -s /bin/bash

使用echo $SHELL再次验证。 结果应为/bin/bash。


6

zsh有一个内置命令emulate,可以通过设置适当的选项来模拟不同的shell,尽管csh永远无法完全模拟。

emulate bash
perform commands
emulate -R zsh

-R 标志可以将该 shell 的所有选项恢复为其默认值。
参见:zsh 手册

1
虽然不清楚它将模拟哪个版本的bash,它会模拟bash 4.x还是5.x? - user1971598

6

您可以只输入bash或者如果您总是想使用bash:

在 "iTerm2" 上:

  • 前往偏好设置 > 配置文件 > 命令
  • 从下拉列表中选择 "命令"
  • 输入 bash

通过关闭 iTerm 并重新打开来测试


5

按照以下步骤进行操作:

chsh -s /bin/bash
重新启动终端
检查正在使用的shell: echo $SHELL
source .profile

现在你已经回到Bash了!


1
用户需要在重新启动终端之前稍等片刻。 - yasin89

4

您只需在终端中键入bash即可切换到bash,然后键入zsh即可切换到zsh。至少对我而言是这样的。


这更简单了。 - andromeda
3
这种方法是可以的,但每次输入 zshbash 都会进入一个子 Shell(在当前 Shell 下运行的子进程)。你需要多次输入 "exit" 才能回到最顶层的 Shell。 - RichVel
这样做要好得多。 - Prakhar Sharma

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