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

viu*_*ser 3 terminal-emulator terminal

使用 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 ?
Run Code Online (Sandbox Code Playgroud)

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

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

test@debian:~$ echo -ne "\b" > /dev/pts/10
Run Code Online (Sandbox Code Playgroud)

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

test@debian:~$ ls?
Run Code Online (Sandbox Code Playgroud)

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

test@debian:~$ lsdirectory?
Run Code Online (Sandbox Code Playgroud)

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

file1  file2  file3
test@debian:~$ ?
Run Code Online (Sandbox Code Playgroud)

当然,通常输入lsdirectory会给我们一个“找不到命令”的错误。某处已节省空间。在哪里?

Cel*_*ada 6

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

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

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