根据man sshd:
LOGIN PROCESS\n When a user successfully logs in, sshd does the following:\n\n <...>\n\n 9. Runs user's shell or command. All commands are run under the\n user's login shell as specified in the system password data\xe2\x80\x90\n base.\nRun Code Online (Sandbox Code Playgroud)\n不过,尚不清楚“在用户的登录 shell 下运行”字面意思是“登录 shell,如bash -l”?我的实验表明,不,不是:
$ ssh u@h shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'\nNot login shell\nRun Code Online (Sandbox Code Playgroud)\n我不明白为什么会这样?它导致运行的命令无法获得通常的环境,就像登录到 shell 一样。这很麻烦。
\n何苦?
清除回滚缓冲区在很多方面都很方便,例如,当我希望运行一些输出较长的命令,并希望快速滚动到此输出的开始时。当回滚缓冲区被清除时,我可以滚动到顶部,然后就完成了。
一些考虑:
clear根据人类的说法,有命令,
如果可能,clear 会清除您的屏幕,包括其回滚缓冲区(如果定义了扩展的“E3”功能)。
在 gnome-terminalclear中不清除回滚缓冲区。(不过,什么是“E3”功能?)
还有reset, 清除,但它做的比这多一点,而且它真的很慢(在我的系统上它需要超过一秒钟,这对人类来说是明显的延迟)。
还有echo -ne '\ec'or echo -ne '\033c',它可以完成这项工作。而且确实比 快得多reset。
问题是,什么是\ec序列,它与什么clear和reset做什么有什么不同,以及为什么没有单独的命令?
还有 readline 的C-l键序列,默认情况下绑定到clear-screen命令(我的意思是,readline 命令,而不是 shell 命令)。这是什么命令?它发出哪个转义序列?它实际上是如何工作的?它运行shell命令吗?或者是什么?同样,在 gnome-terminal 中,它似乎只是通过吐出空行直到提示出现在终端的顶行来工作。不确定其他终端模拟器。这是非常麻烦的行为。它会用大量的空白污染回滚,所以你必须向上滚动更多,更多。它就像一个黑客,而不是干净的解决方案。
另一个问题是,上述\ec序列是否有 readline 命令?我想将它绑定到,C-l因为我总是想在清除屏幕时清除回滚缓冲区。
而另一个问题是如何只需要输入这样的转义序列终端,执行所需的操作?然后不必考虑绑定C-l到另一个 readline 命令(如果存在这样的命令)。我尝试输入Esc,c但是这不起作用。
更新 这个问题主要在这里回答:https : //unix.stackexchange.com/a/375784/257159。这是一个很好的答案,几乎解释了这里提出的所有问题。
termcap terminal-emulator readline escape-characters terminfo