Terminal

終端沒有正確包裝

  • July 6, 2016

我正在使用 Gnome 終端通過 SSH 連接到我的伺服器。我在遠端伺服器(Ubuntu)上的帳戶使用 bash。我的 bashrc 包含一行設置 shell 提示以包括我目前的 git 分支(如果適用):

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h: \[\033[32m\]\w\[\033[00m\]\$(parse_git_branch)\$ "

當我在 git repo 中時,我的終端停止正確包裝。應該換行到第二行的長命令,而不是換行到它們開始的行的開頭,並在我的提示符頂部開始列印。

我沒有遇到包裝問題,除非我的工作目錄位於 git repo 中(即,當parse_git_branch’ 的輸出不為空時)。

我知道不可列印的字元應該包含在\[其中,\]以便 shell(或終端?)知道不將它們計入提示的長度。我相當有信心“導出”行已經正確地做到了……但是我的 regex-fu 不夠強大,無法理解 sed 命令在做什麼,而且我認為它沒有正確插入不可列印的字元.

這個問題非常相似(甚至使用了parse_git_branch我們從這裡得到的相同功能),但另一個問題涉及在提示符中使用表情符號,這對我來說並非如此。

有誰知道我的提示有什麼問題?

原來這是因為我color=always在 git 中啟用了 ui 選項,而不是直接因為我的 shell 提示或parse_git_branch功能。“git branch”命令以顏色顯示,但該parse_git_branch函式的原始作者沒有考慮到這一點,並且以顏色程式碼沒有正確關閉的方式切斷了字元串。

--no-color標誌添加到函式內部的“git branch”命令parse_git_branch足以解決問題,但我實際上已經習慣了顏色——所以這裡是如何複製金色背景:

parse_git_branch() {
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h: \[\033[32m\]\w\[\033[00m\]\[\033[7m\033[33m\]\$(parse_git_branch)\[\033[00m\]$     "

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