Terminal
終端沒有正確包裝
我正在使用 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\]$ "