Bash换行不适用于Minicom等串行终端

时间:2018-10-10 15:07:23

标签: linux bash embedded-linux gnu

我有一个带有BusyBox的嵌入式Linux系统。 BusyBox的默认外壳为ash,但我需要其他功能,因此我想安装bash。

我已经安装了bash,并在系统上运行它,但是我的问题是,每当我写一个长命令并且shell需要下一行时,它会返回到当前行的开头并重新运行命令的开始。

例如: 我写:

aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb

我得到:

bbbbbbbbaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb

代替:

aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb
bbbbbbbb

我将注意到该命令仍然有效。这意味着只有显示器损坏了。默认的外壳(灰)确实知道如何处理这种情况。

我研究了这个问题,并检查了外壳到达行尾时外壳在串行端口中生成的二进制文件,并且它仅发送\ r而没有发送\ n(ash发送\ r \ r \ n这就是为什么效果很好)。

如果我通过ssh从Ubuntu上连接到该设备并使用bash shell,它将运行良好。我认为这是因为Ubuntu终端负责行的排序。

我测试过的其他内容:

  • 我已经看到很多帖子说由于我的PS1变量可能会发生类似的事情。我试图对其进行更改,甚至只在其中放置了一个字符($),没有特殊或不可打印的字符,问题仍然存在。

  • 我尝试配置bash使用的系统变量$ TERM(默认值为vt102,并将其更改为xterm),这没有任何区别。

  • 我试图弄乱$ COLUMNS系统变量并更改其值,bash确实响应该更改。唯一的问题是,当它意识到需要移动到下一行时,它会生成\ r而不是\ n。

有什么办法解决这个问题?也许有些系统变量告诉bash在移至下一行时要写入哪个字符串? 还是当我编译bash时可以更改的标志?

谢谢。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方法是-使用正好80个字符宽的终端。

“调整大小”命令(通常与“ xterm”软件包一起提供)也可以在这里提供帮助-在会话中执行该命令后,与换行相关的命令行行为应该会更好。