我环顾四周,寻找这个问题的答案,但似乎没有找到(这很奇怪)。
我的问题是,是否有任何简单的方法可以从 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 不会改变。但任何新帐户都会zsh
。bash
如果需要,您可以将其更改为。bash
未来某个时候不会成为 macOS 的一部分。显然,许可的限制zsh
较少。
在厌倦了退出并重新启动 iTerm 后,我看到了这篇文章,原因与 OP 知道有诸如 之类的命令相同exec zsh
。
答案4
这对我有用:
exec env -i HOME=$HOME bash -l
exec
替换当前外壳env -i HOME=$HOME
重置所有现有的环境变量并将新 shell 的 HOME 设置为旧的 $HOMEbash -l
启动一个新的登录 shell(zsh 可能有类似的命令)
我将其添加为别名并且工作正常:
alias reload='echo "Reloading shell...";exec env -i HOME=$HOME bash -l'