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)
我一直在尝试使用以下方法来模拟zsh
Bash 中的功能:
$ 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 尚未设置,您可能需要对该值进行硬编码~/.bashrc
。shopt -s checkwinsize
如果尚未设置,您可能需要。