在不重新启动终端应用程序 (mac) 的情况下从终端重新启动 bash?

Mat*_*ias 80 shell bash

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

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

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

Muz*_*zer 105

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

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

  • 终端应用程序中的 bash 是交互式 shell,然后`exec bash` 是否只重新启动该交互式 shell?另外,您能否准确解释 exec 命令的作用及其选项?谢谢! (2认同)
  • 所有这些命令仍然从父 bash 会话中提取变量,因此我不相信这个答案是正确的。 (2认同)

phi*_*hip 14

文艺青年最爱的使用exec $SHELL,如果你想一开始你是相同的外壳接受的答案只会为你工作,如果你正在使用bash。

——

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

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

另外,请注意,Apple 在 macOS Catalina 中用 zsh 替换了 bash,以便获得 OP 正在寻找运行的效果,exec zsh或者exec $SHELL是更新到 macOS 10.15 后要走的路。