在终端中新建标签页时移除“Last login”信息

78

在进行了一些搜索后,我创建了一个~/.hushlogin文件,并且它确实起作用了,但仅适用于新窗口。是否有办法使其适用于新标签页?

8个回答

138

在 Mavericks 系统上,创建空文件~/.hushlogin可以去掉新窗口和新标签页的“最后登录”行。

在我的 Mac 上它起作用。


33
问题在于启用“相同的工作目录”选项后,打开新标签时会搜索当前目录中是否有 .hushlogin 文件。除非你在每个单独的目录都放置一个 .hushlogin 文件,否则只有当你在 ~ 目录下打开新标签时才能看到 ~/.hushlogin。这与保留当前工作目录的功能直接冲突。 - davidA
3
@gibatronic - 它总是在新窗口中工作。如果我在~中,它可以在新标签页中工作。但是,如果我不在~中,它就无法在新标签页中工作。 - Nicolas Barbulesco
是的...这就是为什么我最终做了int3h被接受的答案中所说的。 - gibatronic
12
它在Yosemite下无法工作(对我来说)。 在与“~”不同的文件夹中打开一个新标签页,您就会看到这一点。 - Marius Hofert
1
在MacOS Sierra上完美运行。 - Mikael Korpela
显示剩余3条评论

62

解决方案

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

  1. 在Terminal.app中,转到“首选项->设置”,选择您正在使用的配置文件。转到“Shell”选项卡,在“Startup”标题下检查“Run command:”并输入以下内容:

    login -fpql your-username /bin/bash
    

    your-username替换为您的实际Unix用户名。如果您使用的是非默认bash shell,请使用该shell的完整路径替换/bin/bash(是的,即使您已在“首选项->启动”中设置了它)。

  2. 确保未选中“在shell内运行”复选框。

  3. 如果您选择了“仅当存在除登录shell和以下进程之外的进程时才提示关闭”的选项,请将“login”和“bash”添加到不会提示的进程列表中。

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

  5. 说明

    我们想要在没有.hushlogin文件的情况下,使用-q选项运行login,以告诉它抑制“最后登录”消息。(如上所述,login仅会在cwd中查找该文件,而不是您的主目录,因此您需要在每个要打开shell的目录中都有一个.hushlogin文件,才能使该方法起作用。)

    问题是,当您创建新的shell时(我使用homebrew版本的bash,因此在结尾处有奇怪的bash路径),终端会运行类似于login -pfl your-username /bin/bash -c exec -la bash /usr/local/bin/bash的内容,缺少-q标志。

    不幸的是,没有直接更改终端使用的参数的方法,因此我们只能从终端的默认login -pfl会话中使用login -pfql来跳转到新的登录会话。这种方法不够优美,但它起作用。

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


2
不行...总是打开我的主目录,如果我回滚这些更改或使用另一个配置文件,那就没问题了。 - gibatronic
6
在您的~/.bashrc文件中,最顶部添加一行 [[ -f /etc/profile ]] && . /etc/profile。您可能还希望将类似 \[\e]0;\w\a\] 的内容添加到您的$PS1变量中。 - int3h
1
太棒了!现在一切都完美无缺!非常感谢 @int3h! - gibatronic
5
遇到了$PATH路径不包含某些路径的问题,但是使用@int3h的方法干净地解决了。谢谢! - inket
4
对我来说最好的方法是 login -fpql nhooyr /bin/zsh -l-l 确保 shell 作为登录 shell 启动,因此您不需要自己源任何内容。 - nhooyr
显示剩余9条评论

17

你可以在你的.bash_profile中添加一个clear来清空终端窗口。


2
这是一个不错的选择,但我不喜欢clear命令只是打印新行来“清屏”。 - gibatronic

17

~/.hushlogin添加到系统中是可以的,除非你想在同一文件夹中打开一个新标签页或从Finder中精确地打开Terminal时,在这种情况下它将无效。

我不希望将正在运行的命令更改为另一个登录,因为其登录程序的机制很奇怪而且没有必要,如 login -> login -> zsh。您可以在Activity Monitor中看到它,但是在退出交互式程序(如python repl)时,它也会出现在消息中,指出正在运行python、login和zsh。

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

我目前找到的最佳方法是将printf '\33c\e[3J'添加到~/.zshrc中(或在Terminal/Preferences/Profiles/Shell/Startup/Run command中,勾选Run inside shell)。我选择将它放在~/.zshrc文件的开头,因为启动命令是在其后运行的,如果~/.zshrc文件比较重,则可以在执行printf之前短暂地看到Last Login消息。


6
2022年应该接受这个答案。 - Tom Grushka
1
我仍然能看到已记录的历史消息的闪现(以及来自我的公司关于计算机是他们财产的消息),但是它很快就消失了,看起来很好。遗憾的是,没有办法让它将其视为每个目录中都有.hushlogin文件的方式。 - n8jadams
如果使用iTerm2,您可以在常规选项卡下的终端配置文件中添加此命令>“启动时发送文本”。 - Andrew Bowman

7
这可能与操作系统版本有关。在终端2.3(10.8上),触摸文件~/.hushlogin可以抑制新标签页和新窗口的“最后登录”消息。也就是说,这对我有效。
以防有助于弄清楚发生了什么(并且以防您不知道),请注意,“最后登录”消息原则上来自login(1),而不是shell。或者更准确地说,如果以特定方式调用shell(包括使用-l选项启动它),那么bash将“仿佛已被调用为登录shell”(zsh可能具有类似的功能,尽管我现在找不到)。现在,如果Terminanl在您的OS X版本中打开一个新的选项卡,则shell实际上正在模拟打开登录shell,也许会出现此细节错误。但是,如果您拥有bash/zsh的10.8版本(即3.2.48 / 4.3.11),那么我不知道可能出了什么问题。

1
运行该命令后,我得到了一个 login -pf 和两个 -bash 进程。 - gibatronic
1
嗯……我找到了似乎是问题的原因,每当我从不同于我的家目录 ~ 的目录打开一个新标签页时,我会收到登录消息,这似乎是因为终端始终在当前目录中查找 .hushlogin!这就是为什么它只对我适用于新窗口,新窗口总是在 ~ 中打开的原因! - gibatronic
2
啊哈:听起来很有道理。检查您的终端偏好设置,然后 - 有一个设置“新标签页打开...”,在那里您可以设置“默认工作目录”。 - Norman Gray
1
真遗憾,新标签页保持相同的工作目录对我来说非常方便...希望有一种类似全局hushlogin的东西!@NormanGray,你知道类似的东西吗? - gibatronic
1
想想看,我认为这是一个OS X的错误。登录(1)手册上说:“如果用户的主目录中存在文件.hushlogin,则会抑制所有这些消息”,因此它不应该依赖于新标签打开的位置。您想要报告它还是让我来? - Norman Gray
显示剩余5条评论

1

这是一个老问题,但我认为其他答案中的一个问题尚未解决。如果您不想显示登录信息,但想要从 /etc/motd 显示欢迎消息,则可以执行以下操作之一。

在第一种方法中,首先

cd ~
touch .hushlogin

然后,您可以将cat /etc/motd添加到~/.zshrc~/.bashrc的顶部,具体取决于您使用哪个shell。

第二种方法是添加

clear
cat /etc/motd

根据您使用的shell,将以下内容添加到~/.zshrc~/.bashrc的前两行。


0
一种简单的解决方案,不需要更改任何与登录相关的内容,只需在您的~/.bashrc~/.zshrc文件末尾添加clear命令。它会在初始化时清除终端中的任何初始化打印。这对我非常有效。

-1

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


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接