从终端重新启动bash而不重新启动终端应用程序(mac)?

从终端重新启动bash而不重新启动终端应用程序(mac)?

我环顾四周,寻找这个问题的答案,但似乎没有找到(这很奇怪)。

我的问题是,是否有任何简单的方法可以从 Mac 终端内重新启动 BASH 会话。我只想要与关闭终端应用程序并再次启动它相同的行为(所有变量重置、.bash_profile来源等)。

我知道如何获取资源.bash_profile,但这不是我想要的。我想要这样做的原因之一是因为我的 BASH 提示符的插件具有防止多次加载颜色的代码。因此,采购.bash_profile不会重新加载颜色变量,我必须重新启动终端应用程序才能使更改生效。

答案1

exec bash应该用 bash(的新实例)替换当前的 shell 进程。

编辑:从下面的答案看来,Catalina 用 zsh 替换了 bash。在这种情况下您可以运行exec zsh,或者exec "$SHELL"应该始终使用默认 shell。

答案2

太长了;博士如果您希望启动与您所在的相同的 shell,请使用exec $SHELL。接受的答案仅适用于您使用 bash 的情况。

--

接受的答案对于使用 bash 的 shell 来说非常有用,这也是 OP 所要求的,但是,我在 macOS 上使用带有非默认 shell (zsh) 的终端,并且运行该命令exec bash显然没有达到预期的效果:它启动 bash 而不是我的默认 shell。

因此,与环境无关的命令将利用为用户存储默认 shell 的exec $SHELL环境变量。$SHELL

另请注意,Apple 在 macOS Catalina 中将 bash 替换为 zsh,以便达到 OP 寻求运行的效果,exec zsh或者exec $SHELL是更新到 macOS 10.15 后的方法。

答案3

根据本文当您升级到 Catalina 时,您的 shell 不会改变。但任何新帐户都会zshbash如果需要,您可以将其更改为。bash未来某个时候不会成为 macOS 的一部分。显然,许可的限制zsh较少。

在厌倦了退出并重新启动 iTerm 后,我看到了这篇文章,原因与 OP 知道有诸如 之类的命令相同exec zsh

答案4

这对我有用:

exec env -i HOME=$HOME bash -l
  • exec替换当前外壳
  • env -i HOME=$HOME重置所有现有的环境变量并将新 shell 的 HOME 设置为旧的 $HOME
  • bash -l启动一个新的登录 shell(zsh 可能有类似的命令)

我将其添加为别名并且工作正常:

alias reload='echo "Reloading shell...";exec env -i HOME=$HOME bash -l'

相关内容