我已将 rdist 设置为将我的一些 dot 文件推送到我需要 ssh 进入的所有远程机器。我还在所有这些机器上将 zsh 作为我的默认 shell。
当我 ssh 进入机器然后退出时,屏幕被清除。我觉得这种行为很烦人。我试图防止这种行为是/usr/bin/clear
在我的.logout
文件中注释掉这一行。然后我将这个更新的文件分发到所有远程机器。
问题是,那没有用。我不确定这一点,但我认为.logout
是用于 csh,但我没有.zlogout
(或者.bash_logout
,就此而言)。我的其他点文件(例如.zshrc
, .zshenv
)中没有任何内容似乎会导致屏幕清除。当我通过 ssh 进入远程机器时exec zsh
(为了获得“新的”shell 会话),那么终端在退出 ssh 会话时将不会清除。但否则,问题仍然存在 - 在我连接到的任何机器上,退出时屏幕会清除。
值得一提的是,当我将远程机器上的默认 shell 设置为 bash 时,我似乎没有遇到同样的问题。所以我认为问题出在 zsh 上。
我检查了点文件以确保它们被正确地分配(他们做到了)。除此之外,我的想法已经用完了……为什么我的终端在退出 ssh 时会一直被清除?
编辑:我找到了问题的根源:/etc/zlogout
许多远程机器上都有一个文件。我在许多这些机器上没有 sudo 权限,我不想全局影响用户;有没有办法覆盖中的功能/etc/zlogout
?简单地制作$HOME/.zlogout
文件似乎不起作用。
Zsh 在 RHEL 7 上的行为方式相同,即在 ssh 注销期间终端被清除。
(根据终端,最后一个终端输出会丢失,或者只是滚出视图。)
这是因为/etc/zlogout
- 这是 zsh 包的一部分 - 包含:
clear
Run Code Online (Sandbox Code Playgroud)
(它不包含其他命令)
您可以.zlogout
通过/etc/zlogout
在注销期间完全禁用读取来覆盖您自己的文件中的此清除:
$ cat ~/.zlogout
setopt norcs
Run Code Online (Sandbox Code Playgroud)
禁用 rcs 选项会禁用某些运行控制文件的来源 - 可能因此得名:no Run Control Sourcing