某些命令后提示错误(f / e curl elasticsearch)

时间:2019-02-16 15:41:35

标签: bash

我已按照解决方案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\]\$

1 个答案:

答案 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

...将以更少的开销和更少的副作用解决同一问题。