如何在 gnome 終端機中清除 PS1 的格式?

如何在 gnome 終端機中清除 PS1 的格式?

我已配置gnome-terminal.bashrc具有自訂顏色:

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;37m\][\[\033[00;32m\]\t\[\033[00;37m\]] \[\033[01;34m\]\u\[\033[00;37m\]@\[\033[01;34m\]\h\[\033[00;37m\]:\[\033[01;34m\]\w\[\033[01;32m\]$ '

這意味著當執行這樣的事情時:

在此輸入影像描述

輸出看起來像這樣,即使第一行應該是白色的,並且在我輸入也為綠色的命令之前一直是白色的:

在此輸入影像描述

那麼如何才能使輸出文字顏色不受我將指令顏色設定為綠色的影響呢?我正在運行 Ubuntu GNOME 15.04 和 GNOME 3.16。

資訊更新:

我注意到運行時sudo rkhunter --nocolor --update輸出全是綠色。

答案1

問題是您將命令設為綠色但沒有關閉顏色轉義代碼。因此,所有後續行(包括未套用其自身格式的任何命令的輸出)都以該顏色顯示。作為解決方法(來源),您可以trap將關閉代碼列印到 DEBUG 訊號。將此行新增至您的~/bashrc

trap 'printf "\e[0m" "$_"' DEBUG

這將列印\e[0m(這將關閉打開的顏色代碼)。因為它被trapped 到DEBUG訊號,所以它將在您執行的任何命令之前執行。因此,在點擊Enter和命令實際運行之間。如中所解釋的man bash

如果 sigspec 是 DEBUG,則指令 arg 在每個簡單指令、for 指令、case 指令、select 指令、每個算術 for 指令之前以及在 shell 函式中執行第一個指令之前執行(請參閱上面的 SHELL GRAMMAR)。

相關內容