根据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.\n
Run 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\n
Run 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