如何在 Ubuntu 16 中更改 gnome 終端機中的 bash 提示符號而不弄亂終端標題?

如何在 Ubuntu 16 中更改 gnome 終端機中的 bash 提示符號而不弄亂終端標題?

我不喜歡所有長目錄路徑都會佔用我的終端空間,因此,我透過 python 腳本截斷它們。我已經編輯了 .bashrc 檔案並將 PS1 替換為

export PROMPT_COMMAND='PS1="$(python /home/vinay/bash_promt.py)"'.

當我這樣做時,終端的標題就不再起作用了。它只是顯示Terminal哪個令人惱火。我可以透過在 bash 中執行以下命令來手動更改標題:

PROMPT_COMMAND='echo -ne "\033]0;CUSTOM TITLE\007"'

有沒有辦法將終端機的標題設定為在我的 bash.txt 中設定的自訂提示符。

答案1

對於 gnome-terminal,終端標題是透過PROMPT_COMMAND中定義的設定的/etc/profile.d/vte-2.91.sh

PROMPT_COMMAND,如該腳本中所定義,做了兩件事:

  • 使用 OSC 0 轉義序列 ( \033]0;NEW_TITLE\007) 變更終端標題,

  • 使用 OSC 7 轉義序列變更終端對目前目錄的概念(\033]7;NEW_CURRENT_DIRECTORY\007,這會分解到__vte_osc7函數中)。

如果您從 中刪除第二個PROMPT_COMMAND,您新開啟的終端機視窗或標籤將不會在您在前一個終端機中所在的目錄中開啟。您很可能不想要這個。

因此,在您的 shell 啟動腳本中,在獲取後,vte-2.91.sh您必須建立您的首選PROMPT_COMMAND腳本,以類似於 的方式設定標題vte-2.91.sh,並與預設完全一樣設定當前工作目錄。

我不知道有什麼方法可以PS1在內部或其他任何地方引用 的解析值(即替換用戶名等之後)PROMPT_COMMAND(更不用說過濾掉諸如顏色變化之類的轉義序列)。如果您希望在提示符和視窗標題中看到相同的字串,我相信您需要為PS1和複製該字串的構造PROMPT_COMMAND

答案2

這對你有用

打開 ~/.bashrc。找到這樣一行:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

#透過在其前面放置一個字元來註解掉該行:

# PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

現在新增這一行(您可能想要將其放在註解掉的行之後):

PROMPT_COMMAND='echo -ne "\033]0;Custom Name\007"'

代替Custom Name與您想要更改終端標題的任何內容。

希望這可以幫助。

答案3

要使用的轉義序列是ESC]2;新標題BEL在哪裡ESC鍵貝爾是轉義字符和響鈴字符。喜歡\[\e]2;NEWTITLE\a\]。使用 #Bash 轉義序列,更改提示中的標題如下所示:

export PS1='\[\e]2;new title\a\]prompt > ' 文件參考

因此,還具有自訂終端標題的多色截斷 bash 提示字元的範例是:

export PS1='\[\e]2;$PWD\a\]\e[93m$USER\e[97m@\e[90m$HOSTNAME \e[93m$ \e[0m'

在該範例中,終端標題將始終反映目前工作目錄 ( $PWD),並且無論您位於哪個目錄,終端機提示符號將始終如下所示:user@hostname $

您可以替換$PWDCUSTOM TITLE以使終端標題始終反映CUSTOM TITLE

更新
不要將非列印字元包裹在\[和中時要小心\]中時要小心。沒有它它也能工作,多年來我一直在沒有它們的情況下這樣做。然而,正如我今天透過一些設定發現的那樣,可能會導致一些問題在終端。以下是使用變數並包裝顏色程式碼的更清晰的版本:

T_YELLOW='\[\e[93m\]'
T_WHITE='\[\e[97m\]'
T_GRAY='\[\e[90m\]'
T_DEFAULT='\[\e[0m\]'
T_TITLE='\[\e]2;$PWD\a\]'
export PS1="${T_TITLE}${T_YELLOW}$USER${T_WHITE}@${T_GRAY}$HOSTNAME${T_YELLOW} $ ${T_DEFAULT}"

相關內容