当前位置: 首页>>技术教程>>正文


如何获得长命令行来换行?

, ,

问题描述

在Ubuntu上我注意到了很长时间,这让我感到沮丧的是,当我在比终端宽度更长(更宽)的命令行键入命令时,而不是换行到新行,它会回到第1列在同一行,并启动over-writing我的命令行的开始。 (它实际上并没有覆盖实际的命令,但在视觉上,它覆盖了显示的文本)。

没有看到它就很难解释,但假设我的终端有20个字符宽(我更喜欢120个字符 – 但是为了举例),我想要回显英文字母。我输入的是这样的:

echo abcdefghijklmnopqrstuvwxyz

但是我的终端看起来像在我打开关键之前是:

pqrstuvwxyzghijklmno

当我进入时,它是回声

abcdefghijklmnopqrstuvwxyz

所以我知道命令被正确接收。它只是在”o”之后包装我的打字并在同一行上重新开始。

如果我在只有20个字符宽的终端上键入此命令,我会发生什么:

echo abcdefghijklmno
pqrstuvwxyz

背景:我使用bash作为我的shell,并且在〜/.bashrc中有这行代码:

set -o vi

能够使用VI命令浏览命令行。我目前使用Ubuntu 10.10服务器,并用Putty连接到服务器。

在我工作过的任何其他环境中,如果我输入一个长命令行,当我的命令获得比终端宽度更长的时间时,它将在我正在处理的行下面添加一个新行,并且当我继续输入时,我可以看到我的命令2条不同的线路。但只要我记得使用Ubuntu,我的长命令只占用1行。

当我回到历史记录中的先前命令(我击中Esc,然后’K’返回到先前的命令)时,也会发生这种情况 – 当我得到一个比终端宽度更长的先前命令时,命令行会变形并且我无法知道我在命令中的位置。

我发现只有work-around才能看到整个长命令,就是打开”Esc-V”,它在VI编辑器中打开当前命令。

我不认为我的.bashrc文件中有什么奇怪的东西。我评论了“set -o vi”这一行,但我仍然遇到了这个问题。

我下载了一个新的Putty拷贝,并没有对配置做任何修改 – 我只是输入了我的主机名来连接,我仍然有问题,所以我不认为它与Putty有什么关系(除非我需要进行一些配置更改)

有没有其他人有这个问题,谁能想到如何解决它?

编辑

这是我的.bashrc文件。我已经将相同的配置文件从机器复制到机器,并且在我的$ PS1中使用了特殊字符,这些字符以某种方式抛弃了它。我现在坚持用我的$ PS1的标准bash变量。

感谢@ændrük的.bashrc提示!

…结束编辑…

最佳解决办法

我想你已经配置了颜色的PS1,对吧?

只要确保您的\[在您的颜色集之前的PS1引用内

例如:

PS1='\[\e[0;32m\u@\w/:\[\e[m '

次佳解决办法

确保PS1中的所有non-printable字节都包含在\[ \]中。否则,bash会在提示的长度内计数它们。它使用提示的长度来确定何时换行。

例如,这里bash计数提示为19列宽,而终端显示的提示只有10列宽(My prompt以青色写入,>以默认颜色写入):

PS1='\e[36mMy prompt\e[0m>'         # bash count: 19, actual: 10

而在这里它只计算10列宽的提示,因为它忽略了特殊的\[\]转义之间的字节:

PS1='\[\e[36m\]My prompt\[\e[0m\]>' # bash count: 10, actual: 10

尽管如此,使用tput可以生成终端转义符,而不是对它们进行硬编码:

cyan=$(tput setaf 6) # \e[36m
reset=$(tput sgr0)   # \e[0m
PS1='\[$cyan\]My prompt\[$reset\]>'

有关tput的更多信息,请参阅http://mywiki.wooledge.org/BashFAQ/053http://wiki.bash-hackers.org/scripting/terminalcodes

第三种解决办法

我有类似的问题,最后找到了一个简单的解决方案。

.bashrc文件中添加以下行:

COLUMNS=250

然后键入source ~/.bashrc以获得所需的效果。

第四种办法

即使我在\[\]分隔符中包含颜色代码,我也遇到了与自定义颜色提示相同的问题。事实证明,bash has problems echoing colours from inside a function。我结束了对我的提示使用变量,虽然我的.bashrc稍微不太优雅,但现在一切正常。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/707.html,未经允许,请勿转载。