如何查看/调试终端与shell之间的交互?

如何查看/调试终端与shell之间的交互?

据我了解,终端拦截 列出的控制代码stty -a,并且 shell (Bash) 利用 Readline 库来处理其输入,每次按键后都会收到缓冲的输入。

此外,shell 应该通过终端控制代码将 Readlines 更改传达给终端。但是终端如何将控制代码(例如^W(向后删除单词))传送到终端呢?

为了看到这一点,我想调试终端与 shell 之间的交互。我该怎么做?

答案1

要检查 shell -> 终端方向的通信,最简单的可能是使用记录流script(1),然后检查日志文件。

这不包括其他方向的通信(按键),也不包括旁路操作(ioctl与命令相对应的终端stty)。

(如果您还需要包含这些内容,您可能应该strace应用程序或调试终端仿真器的具体功能。)

^W您会注意到,在 shell -> 终端方向中不存在例如(向后删除单词)这样的东西。仅存在更简单的原语,例如将光标移动指定数量的单元格,或打印(覆盖)字符。它们的行为不能根据包含字母或空格的字符单元而有所不同,因此,这里不存在“单词”的概念。

相关内容