我已按照解决方案https://unix.stackexchange.com/questions/105958/terminal-prompt-not-wrapping-correctly中有关如何设置PS1的说明进行操作。但是我的问题与环绕屏幕的命令太长无关。相反,它似乎是前一个命令在命令行上处理命令后返回的结果。
启动Amazon EC2 Ubuntu 16.04实例时,我正在使用默认的.bashrc。
这一系列步骤将导致命令行混乱:
首先运行:
curl -X GET http://parisx:9200/_cat/indices
然后这个:
curl -X DELETE http://parisx:9200/.monitoring-es-6-2019.02.16
然后它说,注意到它已经说“ ubu”,表明返回的命令已经弄乱了显示。
最后。
{"acknowledged":true}ubu
然后向上滚动并粉碎下一个命令:
GET http://parisx:9200/_cat/indicesoring-es-6-2019.02.16
,但它仍然有效,这意味着它仅显示为乱码,但实际上是正确的命令,就像您在运行它然后检查此历史记录时所显示的那样。因此,仅显示的内容不能反映要运行的内容。
curl -X GET http://parisx:9200/_cat/indices
这是PS1:
echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
答案 0 :(得分:2)
ElasticSearch做错了,通过发出结尾没有尾随换行符的文档:UNIX文本文件将换行符用作行终止符,而不是行定界符(如它们用于Windows)。
Bash 假定其调用的程序行为良好,并将光标留在最左侧的列;您来自curl
的输出超出了预期。
一种方法是修改您的PS1
以便在前面明确添加回车符,因此提示符将始终从前面打印 ,覆盖先前命令中的所有输出,不是以换行符结尾的:
PS1=$'\\[\r\\]'"$PS1"
另一种方法是在提示的前面添加换行符,在行为良好的命令之后添加多余的空白行,并在行为不良的命令输出后立即在行中添加提示:
PS1=$'\\[\n\\]'"$PS1"
另一种方法是捕获curl
的输出,并在不存在时添加换行符重新发送它。可能看起来像:
printf '%s\n' "$(curl -X GET http://parisx:9200/_cat/indices)"
printf '%s\n' "$(curl -X DELETE http://parisx:9200/.monitoring-es-6-2019.02.16)"
...如果由于$(...)
在捕获过程中修剪了所有尾随的换行符而已不存在换行符,则不会添加额外的换行符。
echo
当然,知道了特定的错误命令后,您只能为其添加尾随echo
:
curl -X GET http://parisx:9200/_cat/indices; echo
curl -X DELETE http://parisx:9200/.monitoring-es-6-2019.02.16; echo
...将以更少的开销和更少的副作用解决同一问题。