据我了解,终端拦截 列出的控制代码stty -a
,并且 shell (Bash) 利用 Readline 库来处理其输入,每次按键后都会收到缓冲的输入。
此外,shell 应该通过终端控制代码将 Readlines 更改传达给终端。但是终端如何将控制代码(例如^W
(向后删除单词))传送到终端呢?
为了看到这一点,我想调试终端与 shell 之间的交互。我该怎么做?
答案1
要检查 shell -> 终端方向的通信,最简单的可能是使用记录流script(1)
,然后检查日志文件。
这不包括其他方向的通信(按键),也不包括旁路操作(ioctl
与命令相对应的终端stty
)。
(如果您还需要包含这些内容,您可能应该strace
应用程序或调试终端仿真器的具体功能。)
^W
您会注意到,在 shell -> 终端方向中不存在例如(向后删除单词)这样的东西。仅存在更简单的原语,例如将光标移动指定数量的单元格,或打印(覆盖)字符。它们的行为不能根据包含字母或空格的字符单元而有所不同,因此,这里不存在“单词”的概念。