Bash
if 子句提示自定義問題
我最近稍微調整了一下我的 PS1。程式碼如下:
PS1='$(if [[ $? != 0 ]]; then echo " \e[91m\e[0m"; fi) \u $(assemble_prompt)$ '
失去的字元來自nerd-fonts,在我的問題(以及
assemble_prompt
功能)中並不重要。我遇到的問題是當我將終端視窗大小縮小到提示符的大小(大約)時,PS1 損壞了。然後它似乎忽略了 PS1 設置並將 PS1 設置為
$
僅字元(見截圖)。請注意,當我開始輸入時,它只會在這種情況下覆蓋我的自定義提示。如果上一個命令不成功,我將問題縮小到添加“失敗”字元的 if 子句。如果我刪除該部分,一切都會按預期工作。
有沒有辦法保留
if
子句部分但在視窗尺寸太小時時修復 PS1 重置的問題?PS我
rxvt-unicode
用作我的終端,但問題仍然存在於所有其他終端(經過測試xterm
,st
)。
您可能希望將終端控制程式碼包含在其中,
\[...\]
以告訴 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.