shell 读取错误处理输入按键

shell 读取错误处理输入按键

我正在安装一个相对较新的 Linux Mint,直到现在我才注意到任何重大问题,我意识到我无法使用任何交互式读取用户输入的命令行工具。它不是像我期望的那样通过消耗一行输入来处理输入键,而是将^M字符序列打印到终端并继续提示输入。
例如git add -p

Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y^M

经过更多测试后,我意识到所有 shellread操作都在执行此操作(在zsh和中bash),并且sh完全无法使用。

zsh 和 bash:

$ read test
value^M^C
$

嘘:

$ echo "test"^M^C
$ exit^M^M^M^C
$

我打开了一个新终端,它似乎没有受到影响,所以我没有被困在这里,但我很想知道发生了什么让这个终端表现得像现在这样。我会将破损的部分打开一段时间,以测试人们是否有理论。

答案1

当将终端设置为原始输入模式的程序意外终止并且无法将终端设置恢复为其之前的值时,通常会发生这种情况。

一个简单的操作stty sane应该将一切重置为正常。

作为使终端“原始”^M的一部分,通过\r关闭^J\nICRNLc_iflag 特尔米奥斯设置。这也可以通过命令行来完成stty -icrnl

像 bash 这样的 shell 的命令行通常不受此影响,因为 bash 使自己成为原始终端并进行自己的键转换(为了提供良好的行编辑功能,如左右移动插入点、命令行历史记录)等)并且仅在运行其他命令时恢复默认终端设置。

相关内容