如何重新初始化终端窗口而不是关闭它并启动一个新窗口?

NES*_*NES 75 bash

当我对 shell/bash 行为进行一些更改(例如设置别名)时,是否有快速命令来重新初始化终端窗口而不是关闭和打开新窗口?

小智 74

如果您的意思是重新加载 .bashrc 配置,则:

source ~/.bashrc

为了减少打字,您可以source用点替换:. ~/.bashrc

  • 这不会重置任何内容,如果您对 PATH 进行了更新,那么您现在将拥有旧更新和新更新。 (7认同)
  • `source` 是 bash 特有的。`.` 更标准。两者在 bash 中的工作方式相同。 (3认同)
  • 这只是重新加载您的 PATH 和一些环境变量。它不会“重置”任何东西。@NES 的答案是正确的。 (3认同)
  • 这里有一个问题,这与 `source ~/.bashrc` 有何不同? (2认同)
  • 对于任何寻求实际解决方案的人来说,因为这与关闭并开始新的解决方案完全不同。导出到环境的所有内容仍然会在那里。@isarandi 的[答案](https://askubuntu.com/a/1129323/616464) 可能就是您想要的。 (2认同)

NES*_*NES 51

我在 reset/tset 命令的联机帮助页中找到了一些附加内容

tset 重置终端初始化

命令: reset

Tset 初始化终端。Tset 首先确定您使用的终端类型。使用找到的第一个终端类型按如下方式进行该确定。

一个优点似乎是,它独立于使用的外壳。也适用于这里的鱼。

因此,要重新初始化任何终端,只需执行-

$ tset
Run Code Online (Sandbox Code Playgroud)

或者

$ reset
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这也是错误的。它不会重置现有的环境变量。 (4认同)

小智 11

的另一个选项exec bash是,如果您更改了.profile(或.bash_profile),则可以执行

$ exec bash --login
Run Code Online (Sandbox Code Playgroud)

这也将再次读取您的个人资料。添加该-i选项并明确告诉 bash 这是一个交互式 shell也没有什么坏处,但它通常可以自己解决这个问题。

  • @ArmenSanoyan 但这会创建一个新的智利进程,shell 调用`bash --login` 作为其父进程。使用 `exec bash --login` 将替换当前的 shell,如 [`man bash`](http://manpages.ubuntu.com/manpages/trusty/en/man1/bash.1.html) 中所述 (3认同)
  • 不幸的是也错了。已经设置的环境变量仍然存在并且不会重置。 (2认同)

Rap*_*sek 8

您必须用新实例替换正在运行的应用程序/shell。例如,如果您使用bash首选 shell 在命令行中键入以下行($是命令行开头的占位符):

> $ exec bash
Run Code Online (Sandbox Code Playgroud)

正在运行的应用程序/shell 被替换bash为从头开始的新实例。你之前的所有修改都没有了。

备注:不要忘记您的终端应用程序可能会重新编程。您必须手动重置终端应用程序。

  • “重新编程”是什么意思? (2认同)
  • 这个答案也是错误的。exec 从其前身继承了环境。因此它不会恢复环境变量。有些可能会通过运行新的 bash 重新加载,但不会删除那些未被覆盖的。 (2认同)

isa*_*ndi 6

使用exec sudo --login --user $USER.

如果您还希望先前输入的命令消失(完全重置终端),请将其与resetas结合使用reset; exec sudo --login --user $USER

要保留当前工作目录,请使用以下函数:

reinit(){
  reset
  exec sudo --login --user "$USER" /bin/sh -c "cd '$PWD'; exec '$SHELL' -l"
}
Run Code Online (Sandbox Code Playgroud)

网络上有很多答案,但大多数实际上不起作用。简单的测试方法是设置export SOMEVAR=42然后执行所谓的重置命令并执行echo $SOMEVAR。如果是 42,则环境未重置。

还有exec -c bash -lor exec env -i bash -l,但这些都坏了,在此之后没有设置 $HOME 变量。