在终端中输入的字符保存在哪里?

在终端中输入的字符保存在哪里?

使用 xterm 和 bash 4.3 从(伪)终端 pts/10 输入(█ 是光标):

test@debian:~$ ps
  PID TTY          TIME CMD
13128 pts/10   00:00:02 bash
21037 pts/10   00:00:00 ps
test@debian:~$ ls
Mail  directory  file
test@debian:~$ ls directory
file1  file2  file3
test@debian:~$ ls █

(如你所见,后面有一个空格ls

然后从另一个终端发送一个退格键:

test@debian:~$ echo -ne "\b" > /dev/pts/10

在终端 pts/10 中,我们现在有:

test@debian:~$ ls█

我们输入directory,所以我们有:

test@debian:~$ lsdirectory█

按回车键我们会列出“目录”:

file1  file2  file3
test@debian:~$ █

当然,正常输入lsdirectory会给我们一个“命令未找到”错误。某个地方已经节省了空间。在哪里?

答案1

shell 的命令行编辑器节省了空间。事实上,它保存了您输入的构成命令行的所有字符。

我想知道您是否会认为 shell 通过在执行命令之前读回屏幕内容来知道要执行什么命令。事实并非如此。此外,终端甚至不一定提供任何读回屏幕内容的方法,因此即使 shell 愿意,也不能指望能够做到这一点。

另外:您应该小心多个应用程序同时使用同一个终端。在这种情况下,您的 shell 正在终端上运行其命令行编辑器,而您从其他地方将一个空格回显到同一个终端中。您的 shell 不知道您已经这样做了,并且 shell 对光标位置的理解现在与光标在屏幕上的实际位置不同步。这可能会混淆并破坏您的 shell 正确显示命令行的能力。如果您使用箭头键和基于菜单的制表符完成等编辑命令行,您的 shell 将想要移动光标并重新显示命令行的某些部分,但它会犯错误,因为光标不在它认为的位置。

相关内容