如果您这样做:
stty eol =
然后运行EDIT中建议的演示,您将在test.out的打印输出中看到foo bar。终端的线路规则将在读取输入中的每个特殊eol字符时将其输出刷新到其读取器。
Linux规范模式终端-可以配置stty icanon
或可能仅配置为stty sane
-处理以下特殊输入字符...
- of
- 默认:
^D
- 终止输入线,并将输出刷新到阅读器。因为它已从输入中删除,所以如果将它作为一行中的唯一字符输入,则它将作为空读取(或文件结尾)传递给读取器。
- EOL
- 默认值:未分配
- 也终止输入线,但不会从输入中删除。
- 杀
- 抹去
- 默认:
^H
(或可能@
或^?
在某些系统上)
- 擦除最后一个缓冲的输入字符。
当还设置了iexten时 -类似,stty icanon iexten
或者再次可能是stty sane
,一个规范的Linux终端也将处理...
- eol2
- 默认值:未分配
- 也还终止的输入线,并且也不会从输入移除。
- 酶
- pr
- 下一个
- 默认:
^V
- 就紧随其后的输入字符的行纪律而言,删除任何特殊意义。
通过从输入流中删除它们来处理这些字符(eol和eol2除外),即在将处理后的流传递给读取器之前执行相关的特殊功能-通常是您的shell,但是无论前台进程组是什么。
其他特殊输入字符也经过类似处理,但可以独立于任何icanon设置进行配置,包括isig设置-类似的设置stty isig
,也可能包含在合理的配置中:
- 退出
- 默认:
^\
- 刷新所有缓冲的输入(如果未设置noflsh),然后将SIGQUIT发送到前台进程组-可能会生成核心转储。
- 悬念
- 默认:
^Z
- 刷新所有缓冲的输入(如果未设置noflsh),然后将SIGTSTP发送到前台进程组。暂停的进程组很可能可以使用()作业控制的shell 中的一个
kill -CONT "$!"
或仅fg
在其中进行恢复。set -m
- 内部
- 默认:
^C
- 刷新所有缓冲的输入(如果未设置noflsh),然后将SIGINT发送到前台进程组。
和ixon集-配置类似stty ixon
并且通常也包含在合理的配置中:
- 停
- 默认:
^S
- 停止所有输出到读取器,直到在输入中读取了start或- 也设置了ixany-至少读取了一个字符为止。
- 开始
- 默认:
^Q
- 如果先前已使用stop停止输出,则重新启动输出。
- 两者的停止和开始从输入移除处理时,但重新启动,如果输出由于在输入任何字符时IXANY被设置,那么该字符不会被删除。
在其他非Linux系统上处理的特殊字符可能包括...
- 齐平
- 默认:
^O
- 切换丢弃和刷新缓冲的输入并将其从输入中移除。
- Dsusp
- 默认值:未分配
- 仅当阅读器读取分配的特殊输入字符然后发送SIGTSTP时,才刷新所有缓冲的输入。
可能...
- 开关
- 默认值
^@
(含义\0
或NUL
)
- 切换前景外壳层。与某些系统上的
shl
Shell-layers应用程序一起使用。
- 可以在工具套件中自由地实现
shl
复用pty并因此与作业控制兼容的实现,而不是原始实现依赖于swtch的行为heirloom-toolchest
。
为了更清楚地了解如何以及为什么(也许为什么不)处理这些输入函数,请咨询man 3 termios
。
上述所有功能都可以分配(或重新分配)(如适用)stty
function assigned-key
。要禁用任何单个功能,请执行。另外,与任何与所有GNU,AST,或传家宝的前述的行编辑功能分配各种尝试实现似乎表明,你也可以为NUL分配任何功能似乎等同于将其设置为未分配在我的Linux系统。stty
function
^-
stty
stty
function
^@
也许在键入这些字符时确实看到了这些字符的回显(可以使用[-] ctlecho进行配置),但这只是一个标记,用来向您显示操作的位置-接收到输入的程序并不认为您输入它们(eol [2]除外),并且仅接收行规对其应用了效果的输入副本。
终端处理各种行编辑功能的结果是,它必须在某种程度上缓冲输入,以便对您指示它应该执行的功能采取行动-因此,不能无限制地提供输入你可能随时杀人。该行缓冲是更精确的杀缓冲区。
如果设置了EOL或EOL2字符发生在输入一些分隔符-即使既不是一个新行或回车符,例如-那么你将只能杀了到如此地步,它上次发生和你杀缓冲区将尽可能地扩展到输入中的下一个-或换行符(如果设置了icrnl而没有设置igncr,则返回一个换行符)。