使用 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 将想要移动光标并重新显示命令行的某些部分,但它会犯错误,因为光标不在它认为的位置。