Linux

Bash:如何知道最後一個命令的輸出是否以換行符結尾?

  • December 29, 2009

大多數情況下,命令的輸出以換行符結尾。但有時它不會,因此下一個 shell 提示符與輸出一起列印在同一行中。

例子:

根@主機名

$$ ~ $$# echo -n hello

helloroot@hostname$$ ~ $$#

我一直覺得這很煩人。

現在,我可以在 PS1 變數的開頭添加一個“\n”,但大多數時候這會列印出我不需要的額外行。

是否有可能知道最後一個命令的輸出是否以換行符結尾?


解決方案:(

感謝丹尼斯)

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

我一直在嘗試以下方法來模擬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$ '

它發出一個反向影片百分號,然後是一堆空格以使其換行到下一行,然後是一個輸入,然後是一個美元符號和一個空格。您可以在“\015”之後添加提示轉義來自定義提示。

使用這取決於您的終端如何處理右邊距換行(自動邊距)。PROMPT_SP 的長度是任意的,但應至少為 80 或您通常的終端寬​​度。for如果在循環執行時 $COLUMNS 尚未設置,您可能需要對該值進行硬編碼~/.bashrcshopt -s checkwinsize如果尚未設置,您可能需要。

引用自:https://serverfault.com/questions/97503