Bash:如何知道最后一个命令的输出是否以换行符结尾?

Get*_*ree 10 linux shell bash prompt

大多数情况下,命令的输出以换行符结尾。但有时不会,因此下一个 shell 提示与输出一起打印在同一行中。

例子:

root@hostname [~] # echo -n hello
helloroot@hostname [~] #

我一直觉得这很烦人。
现在,我可以在 PS1 变量的开头添加一个“\n”,但大多数情况下会打印我不需要的额外行。

是否有可能知道最后一个命令的输出是否以换行符结尾?


解决方案:(
感谢丹尼斯)

PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
Run Code Online (Sandbox Code Playgroud)

Den*_*son 6

我一直在尝试使用以下方法来模拟zshBash 中的功能:

$ unset PROMPT_SP; for ((i = 1; i <= $COLUMNS + 52; i++ )); do PROMPT_SP+=' '; done
$ PS1='\[\e[7m%\e[m\]${PROMPT_SP: -$COLUMNS+1}\015$ '
Run Code Online (Sandbox Code Playgroud)

它发出一个反向视频百分号,然后是一堆空格以使其换行到下一行,然后是一个回车符,然后是一个美元符号和一个空格。您可以在“\015”之后添加提示转义以自定义您的提示。

使用这取决于您的终端如何处理右边距换行(自动边距)。PROMPT_SP 的长度是任意的,但应该至少为 80 或任何您通常的终端宽度。如果在for中运行循环时 $COLUMNS 尚未设置,您可能需要对该值进行硬编码~/.bashrcshopt -s checkwinsize如果尚未设置,您可能需要。