因为原始模式有点近似。原始模式没有官方定义,实际上它对于不同的 API 意味着不同的事情。
他们的意思是,像这样的 shellbash实现自己的行编辑器会禁用tty 行规则的某些功能。特别是,他们需要禁用行规则自己的行编辑器(icanon设置又名-cbreak)和本地echo。^C它们不会禁用其他一些线路规则功能,例如在(设置)时发送 SIGINT isig。
stty -a报告各个离散 termios 设置(如上面的icanon、echo、isig)。
stty还支持一些别名来一次设置多个设置,例如sane,cooked或raw...。
stty raw禁用除 之外的所有 tty 线路规则功能echo。因此,它禁用了一些功能(例如isig),而这些功能bash不适用于其行编辑器,并且它不会禁用,echo而会禁用bash。
GNU 实现手册stty描述raw为等同于-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -icanon -opost -isig -iuclc -ixany -imaxbel -xcase min 1 time 0. 这是一组可调整的离散termios设置stty raw(不考虑其他设置)。
请注意,这opost不是stty别名,它是自己的离散 tty 线路规则设置,但它会影响所有其他输出后处理设置,例如onlcr, olcuc。或者换句话说,如果不打开,则onlcr/olcuc无效,这解释了为什么不费心关闭所有这些输出处理功能。opoststty raw
有些系统具有cfmakeraw()/ cfmakesane()libc 函数,也可以同时设置多个设置。GNU libccfmakeraw()的至少与 GNU 的不同之处在于stty raw,例如它禁用echo并且不禁用iuclc或ixoff。