根据我所阅读的内容,当终端处于原始模式时,终端驱动程序不会处理字符,而是直接发送。
我使用命令将终端设置为原始模式stty raw,我注意到输出每次都向右缩进,直到没有更多空间。这就是我的意思:
为什么会发生这种行为?!
我发现了两个关于伪终端 (pty) 工作原理的相互矛盾的图像。
第一张图显示了 pty 从属端的进程与线路规则对话:
第二张图显示了 pty 从属端的进程与从属 tty 驱动程序对话:
哪个图是正确的?
假设ping命令正在运行,我在终端上输入一些内容,同时ping仍在运行。
现在,当ping终止并bash获得控制权时,bash将在终端上打印我在ping运行时输入的内容。这是一个屏幕截图,显示了我的意思:
bash这个信息是怎么得到的?我确信它不是从 得到的stdin,因为当我输入时"I typed this while ping was running",我没有按下Enter(所以stdin是空的)。
我有一个带bash外壳的终端。
终端ICRNL设置了标志(因此当终端发送 时CR,它将被转换为LF,然后LF将被发送到bash):
但是我做了一个测试,结果表明bash会收到CR而不是LF. 这是为什么?
我所做的测试正在hexdump另一个终端中运行,并让它读取第一个终端发送的内容。
当我做这样的事情时:
grep "hello" /home/paul/*
Run Code Online (Sandbox Code Playgroud)
有用。
但是当我做这样的事情时:
grep "hello" "/home/paul/*"
Run Code Online (Sandbox Code Playgroud)
grep 显示错误:
grep: /home/paul/*: 没有这样的文件或文件
这是为什么?