在不关闭 MacOS 的情况下重启终端

Posted

技术标签:

【中文标题】在不关闭 MacOS 的情况下重启终端【英文标题】:Restart terminal without closing on MacOS 【发布时间】:2019-12-07 07:06:28 【问题描述】:

如何在不关闭窗口的情况下重启我当前的 MacOS 终端会话?

在 Linux 中,我使用 exec bash,但它在这种环境中不起作用。我对.bash_profile(提示、别名等)做了一些更改,我希望在不关闭它并再次打开的情况下看到它。

提前致谢

【问题讨论】:

如何从当前终端运行terminal(或任何您的终端程序名称——iTerm?)来打开一个新终端? 是关于重置相同的终端会话,而不是应用程序或窗口 @blagus : . ~/.bash_profile 不会实现你想要的吗? @blagus,我也使用macOS,我猜exec bash -l 非常适合这个场景。 如果您需要做的只是从您的 .bash_profile 重新加载更改 - 请尝试 source ~/.bash_profile。 ***.com/questions/4608187/… 【参考方案1】:

只需输入命令:

exec bash -l

我想应该这样做。

对于zsh

exec zsh -l

这是必需的,因为默认情况下macOS 上的每个 shell 都是登录 shell。

exec bash 会用非登录shell 替换当前shell,这与关闭和重新打开终端的效果不同。

exec 将使新的bash -l 进程替换当前的shell。如果不使用execbash -l 将在当前 shell 上生成一个新 shell,并增加 $SHLVL

【讨论】:

这只清除终端,不会重启bash脚本 @blagus,抱歉我之前误读了你的问题,请查看更新后的答案 我试过 exec zsh -l 并重新启动了 zsh 会话。【参考方案2】:

假设您将问题解释为在终端会话的状态下与关闭和重新打开终端具有相同的效果,实际答案似乎是运行所用 shell 的可执行文件以启动新会话:

https://unix.stackexchange.com/a/217907/137983

zsh

如果您不在使用 ZSH 为默认 shell 的 Catalina,它将是:

bash

在此之后,之前会话的所有状态(如会话环境变量)都将被重置。我认为 ZSH 配置文件也应该重新获取资源。

【讨论】:

macOS,默认情况下每个shell都是一个登录shell。所以不,仅运行可执行文件与关闭和重新打开终端的效果不同。写bash 会调用.bashrc,而写bash -l 会调用.bash_profile。同样,如果没有exec,当前的 shell 将保留在原地,并且将生成一个带有递增 $SHLVL 的新 shell。【参考方案3】:

如果您对.bashrc.bash_profile 进行了任何更改,则无需关闭终端,您可以在.bashrc.bash_profile 中指定alias,如下所示重新启动终端:

alias rest='exec bash -l;source ~/.bashrc;source ~/.bash_profile'

这个命令再次获取 .bashrc 和 .bash_profile,在某种意义上重新启动终端并创建一个新的终端会话。这个对我有用。试试这个!

所以,如果你想重启终端,只需在终端中输入rest(restart 的缩写)即可。

【讨论】:

【参考方案4】:

对我来说,其他解决方案都不适用于 ZSH。

实际上,source ~/.zshrc 完成了这项工作。

注意:运行exec zsh -l 输出/Users/my_username/.zprofile:3: command not found: yarn(其中my_username 是我的用户名)。但是只运行上面提到的命令就可以了。

【讨论】:

我认为这仅仅意味着您的.zprofile 调用yarn 时它不在路径中或未安装(您需要修复)。我从某个时候开始没有联系过macOS,但是AFAIK,每个shell 都是那里的登录shell。因此,如果您在 macOS 上打开每个新标签,您应该会收到上述错误。如果您不在macOS,只需执行exec zsh 另外,再次采购.zshrc 并不总是一个好主意。您基本上是在.zshrc 中运行代码两次。许多工具将它们的初始化代码添加到.zshrc,其中一些可能无法容忍它们的代码被运行两次。我的意思是,他们通常应该处理它,但不是每个人都这样做。更好的办法是清除之前运行造成的影响,然后重新启动:exec zshexec zsh -l

以上是关于在不关闭 MacOS 的情况下重启终端的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用命令的情况下以编程方式关闭/重启 linux 机器(运行时)

有没有办法在不关闭当前会话的情况下“刷新”终端/iTerm?

如何在不打开终端的情况下更改默认 shell?

Ubuntu系统下如何在不重启的情况下永久修改hostname主机名

如何在不将其连接到终端的情况下运行“屏幕”,以便可以在 C++ (qt) 应用程序中捕获输出?

如何在不关闭的情况下保存 Spyder IDE 状态?