答案1
这被称为“阶梯效应”,是由于数据通过内核到达终端时缺少 LF -> CR LF(又名\n
-> )转换造成的。\r\n
应用程序应该发出\n
,但这会导致终端将光标移动到下一行,而不会返回到第一列。终端也需要\r
才能返回那里。转换在内核的 tty 处理(线路规则)中发生(或不发生),取决于 ONLCR 标志。
stty
比较终端正常运行时的输出和异常运行时的输出,我很确定您会看到一个-onlcr
条目出现。
通过执行恢复正常行为stty onlcr
。
(有关详细信息,请参阅https://unix.stackexchange.com/a/151963)
我无法判断这种错误设置发生的原因是什么。可能是 bash-5.2 中的一个错误,没有正确恢复 stty 设置(bash 需要在执行命令时和等待输入下一个命令时来回切换它们)。或者可能是您之前启动的另一个应用程序使终端处于此状态(可能是在非正常退出之后,例如^C
)。请留意您的哪些操作触发了此行为,如果您发现了问题,请告诉我们。
答案2
同样,stty
已经启用。我通过使用以下包onlcr
暂时解决了这个问题:unbuffer
expect
unbuffer ./script.sh
F。