进一步阅读

进一步阅读

通常,bash 命令行会换行——我已经习惯了并且效果很好:

[cnd@MacBook-Pro ~]$ echo abcdefgABCDEFGhijklmnopHIJKLMNOPq
rsQRStuvTuvWXYZ

(我把窗口缩小来演示)

然而,默认的 CentOS8 shell 不再执行此操作。相反,它会截断您输入的大部分开头(一旦您到达终端宽度末尾的 3 个字符以内),将其替换为“">”,并且您将无法再看到您输入的内容。

[cnd@hpz ~]$ 
<EFGhijklmnopHIJKLMNOPqrsQRStuvTuvWXYZ

(从 shell 窗口实际复制/粘贴)

阻止这种令人恼火的行为的正确方法是什么?我需要查看整个命令(我输入了很多长的 Perl 语句 - 在运行之前进行检查很重要!)

我尝试过各种各样的事情,比如使用 vt100 或 xterm 作为终端,一些“set”命令和其他导出,但到目前为止我无法猜测,谷歌似乎没有任何答案(被不相关的问题污染)关于输出换行、不需要的滚动、ansi 转义提示转义等)

答案1

这是 GNU Readline 行输入编辑库的行为,并且在任何使用 Readline 的程序中都表现出来,而不仅仅是 Bourne Again shell。

如果 termcap/terminfo 数据库中的终端记录(由TERM环境变量表示)没有提供向上移动光标的终端功能,则 Readline 会从多行模式回退到横向滚动的单行模式(在Korn shell 的时尚,它使用自己的行编辑库)。

确实,唯一的文档是隐藏在库源代码中的注释。

horizontal-scroll-mode您还可以通过将 Readline 的变量设置为 on 来强制它回退到单行模式。但是,您不能强制它使用多行模式,除了通过提供功能齐全的 termcap/terminfo 记录。

讽刺的是,这种后备措施对于终端和终端仿真器来说非常重要,即使在 35 年前,终端和终端仿真器也很少见。行式打印机和dumb终端首先不适合这种形式的行输入编辑。并且几乎每一个现代视频终端有一个向上移动光标的控制序列。

21 世纪更明智的方法是默认使用 ECMA-48 标准,该标准自 1976 年以来一直存在,并从 20 世纪 80 年代中期开始得到广泛支持,并制定dumb(实际上是 1968 年的 TTY-37,参见glassttyvanillatty37)例外而不是默认。这将认识到,如今人们几乎永远不会遇到甚至是真正的 TTY-37,更不用说能够完成输入行编辑但缺乏光标向上控制序列的终端了。

GNU Readline 还没有做到这一点。

进一步阅读

相关内容