大多数情况下,命令的输出以换行符结束。但是有时却不是,因此下一个shell提示与输出一起打印在同一行中。
例:
root @ hostname [〜]#echo -n你好
helloroot @ hostname [〜]#
我总是觉得很烦。
现在,我可以在PS1变量的开头添加“ \ n”,但是大多数情况下,这将打印我不需要的额外一行。
是否可以知道最后一条命令的输出是否以换行符结尾?
解决方案:(
感谢丹尼斯)
PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
这应该移到超级用户。
—
ℝaphink
我喜欢你的版本!您曾经
—
暂停,直到另行通知。
$()
在一个地方使用过,而在另一地方则使用了反引号。您可以$()
在两者中使用。
我知道。但是对我来说,这样
—
读起来
我不会使用,
—
dlitz
tput cols
因为无论如何它只会输出COLUMNS变量的值,并且速度较慢,因为它不是内置的shell。您还需要包含\e[K
(相当于tput el
)来删除插入的空格,以便在默认情况下复制和粘贴时不会出现一堆尾随空格。最后,您需要将所有这些魔咒放在之间\[
,\]
否则bash会尝试猜测您的光标位置,并且在您编辑命令/历史记录时会弄乱。
整个过程可以做到:
—
dlitz
PS1='\[\e[7m%\e[m$( printf "%*s" "$((COLUMNS-1))" "" )\r\e[K\]\u@\h [\w]\$ '