Linux
Bash:如何知道最後一個命令的輸出是否以換行符結尾?
大多數情況下,命令的輸出以換行符結尾。但有時它不會,因此下一個 shell 提示符與輸出一起列印在同一行中。
例子:
根@主機名
$$ ~ $$# echo -n hello
helloroot@hostname$$ ~ $$#
我一直覺得這很煩人。
現在,我可以在 PS1 變數的開頭添加一個“\n”,但大多數時候這會列印出我不需要的額外行。
是否有可能知道最後一個命令的輸出是否以換行符結尾?
解決方案:(
感謝丹尼斯)
PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '
我一直在嘗試以下方法來模擬
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$ '
它發出一個反向影片百分號,然後是一堆空格以使其換行到下一行,然後是一個輸入,然後是一個美元符號和一個空格。您可以在“\015”之後添加提示轉義來自定義提示。
使用這取決於您的終端如何處理右邊距換行(自動邊距)。PROMPT_SP 的長度是任意的,但應至少為 80 或您通常的終端寬度。
for
如果在循環執行時 $COLUMNS 尚未設置,您可能需要對該值進行硬編碼~/.bashrc
。shopt -s checkwinsize
如果尚未設置,您可能需要。