Bash

if 子句提示自定義問題

  • April 9, 2017

我最近稍微調整了一下我的 PS1。程式碼如下:

PS1='$(if [[ $? != 0 ]]; then echo " \e[91m\e[0m"; fi) \u $(assemble_prompt)$ '

失去的字元來自nerd-fonts,在我的問題(以及assemble_prompt功能)中並不重要。

我遇到的問題是當我將終端視窗大小縮小到提示符的大小(大約)時,PS1 損壞了。然後它似乎忽略了 PS1 設置並將 PS1 設置為$僅字元(見截圖)。請注意,當我開始輸入時,它只會在這種情況下覆蓋我的自定義提示。

PS1 瘋了

如果上一個命令不成功,我將問題縮小到添加“失敗”字元的 if 子句。如果我刪除該部分,一切都會按預期工作。

有沒有辦法保留if子句部分但在視窗尺寸太小時時修復 PS1 重置的問題?

PS我rxvt-unicode用作我的終端,但問題仍然存在於所有其他終端(經過測試xtermst)。

您可能希望將終端控制程式碼包含在其中,\[...\]以告訴 Bash 它們實際上並未列印字元。否則,當嘗試計算提示的寬度時,它們會混淆 shell。

所以使用"\[\e[91m\]xxx\[\e[0m\]".

手冊

\[  Begin a sequence of non-printing characters. 
   This could be used to embed a terminal control sequence into the prompt.
\]  End a sequence of non-printing characters.

引用自:https://unix.stackexchange.com/questions/357955