删除终端中新选项卡的“上次登录”消息

在对它进行了一些搜索之后,我创建了一个 ~/.hushlogin文件,并且它工作了,但是只适用于新窗口。有没有办法让它也适用于新标签页?

38386 次浏览

这可能与操作系统的版本有关。在终端2.3(10.8)上,触摸文件 ~/.hushlogin会抑制新标签和新窗口的“最后一次登录”消息。也就是说,它适合我。

为了以防它有助于弄清楚发生了什么(以防您不知道) ,请注意,“ last login”消息原则上来自 login(1) ,而不是 shell。或者,更确切地说,如果以特定的方式调用 shell (包括使用 -l选项启动它) ,那么 bash 将“作为登录 shell 进行调用”(zsh 可能有类似的特性,尽管我现在找不到它)。现在,当 Terminal 在 OS X 版本中打开一个新的选项卡时,shell 实际上就是 模拟打开一个登录 shell,可能这个细节是错误的。但是如果您有10.8版本的 bash/zsh (即3.2.48/4.3.11) ,那么我不知道可能会出现什么问题。

解决方案

这是在运行 OS X 10.8.3。我还没有测试它在其他版本,但只要终端有上述选项,那么它应该工作。

  1. 在 Terminal al.app 中,转到 Preferences-> Settings 并选择您正在使用的配置文件。进入“ Shell”选项卡,在“ Startup”标题下,勾选“ Run command:”,然后在框中输入:

    login -fpql your-username /bin/bash
    

    用实际的 Unix 用户名替换 your-username。如果您使用的 shell 不是默认的 bash shell,那么将 /bin/bash替换为该 shell 的完整路径(是的,即使您已经在 Preferences-> Startup 中设置了它)

  2. 确保“ Run inside shell”是 不受约束

  3. 如果您选择了“ Prompt before close: Only If there are process other than login shell and:”选项,请将“ login”和“ bash”添加到它不会提示的进程列表中。

  4. 确保您有一个 ~/.bashrc文件,因为这将是 bash 从现在开始在启动时使用的文件,而不是 ~/.bash_profile。我只有一个文件引用其他使用 这种方法。您还需要确保它来源于/etc/profile。

解释

我们希望使用 -q选项运行 login,告诉它取消“ Last login”消息,即使在没有 .hushlogin文件的情况下也是如此。(如上所述,login只会在 cwd 中查找该文件,而不会查找主目录,因此您需要在每个要打开 shell 的目录中都有一个 .hushlogin文件,这样才能使用该方法。)

问题是当你创建一个新的 shell 时,Terminal 会运行类似于 login -pfl your-username /bin/bash -c exec -la bash /usr/local/bin/bash的程序(我使用的是自制的 bash 版本,因此末尾的 bash 路径很奇怪) ,它没有 -q标志。

不幸的是,没有办法直接改变参数终端使用,所以我们只是蹦床一个新的登录会话与 login -pfql从终端的默认 login -pfl会话。虽然不够优雅,但很有效。

我们需要使用 -q选项和 bash 路径来保持“新窗口/选项卡打开时使用: 相同的工作目录”选项正常工作。如果您不关心这个选项,您可以删除这个标志和参数,并且可能避免上面的 .bashrc内容。

在 Mavericks 上,创建空文件 ~/.hushlogin会删除新窗口和新选项卡的“ Last login”行。

在我的 Mac 电脑上可以用。

你可以在你的 .bash_profile上加一个 clear

一个简单的解决方案是在 ~/.bashrc~/.zshrc文件的末尾添加 clear命令。它将从任何初始化打印中清除初始化中的终端。对我很有效。

添加 ~/.hushlogin是可以的,除非你想在同一个文件夹中打开一个新的选项卡,或者从 Finder 打开终端到确切的文件夹,在这种情况下它不会工作。

由于奇怪的不必要的方案 login -> login -> zsh,我希望避免将 running 命令更改为另一个 login。您可以在活动监视器中看到它,但是当您退出 Python、 login 和 zsh 正在运行的消息中的交互式程序(比如 python repl)时,它也会显示出来。

clear放在 ~/.zshrc中并不理想,因为在 mac 上它只会打印大量换行(如果你向后滚动,就会看到它们)。

到目前为止,我发现最好的方法是将 printf '\33c\e[3J'添加到 ~/.zshrc(或者在 Terminal/Preferences/Profiles/Shell/Startup/Run command中选中 Run inside shell)。我选择了 ~/.zshrc文件的开头,因为启动命令在它之后运行,如果 ~/.zshrc文件很重,在执行 printf 之前可以简要地看到 Last Login 消息。

在我的 MacOS Big Sur 11.1上,它可以工作。