Windows - 終端機顏色表現奇怪

Windows - 終端機顏色表現奇怪

帶有 wsl bash 的超級終端

一段時間以來,我的終端顯示的顏色出現了奇怪的行為。上面是超級終端機內的 bash(來自 Windows Linux 子系統)的螢幕截圖。您可以看到顏色一開始沒問題,但隨後我遇到了一堆權限問題ls,一切都出了問題。然後灰色背景會無限期地持續下去。

雖然我沒有螢幕截圖,但我在 VSCode 中的 Powershell 中也目睹了相同的行為 - 所以我不太願意將此稱為 Hyper 的問題。似乎一旦出現錯誤,或者 shell 出於某種原因感覺需要顯示顏色,一切都會變得瘋狂。

此外,我嘗試過但ls --color=auto沒有運氣 - 產生了相同的結果。

有誰知道 Windows / bash / WSL 設定可以防止這種情況發生?

編輯:我發現這個突出顯示尊重Windows 設定窗格中Ubuntu 上的Bash 中「預設」選項中設定的任何預設「螢幕背景」顏色,但只有在調用某些命令時(如我上面的螢幕截圖所示)?這對比我更有知識的人來說有意義嗎?

在此輸入影像描述

答案1

深入了解後,我發現解決方案是在 WSL 設定中將預設顏色設為「螢幕背景」顏色黑色的(#000)。我嘗試按照斯科特的回答中提到的方式來設定我想要的顏色,但這不起作用。看來來自 WSL 的任何顏色都是相加的,因此任何顏色變化都會與第 3 方程式(Hyper、VSCode)中的背景顏色結合併發生衝突。

答案2

您的更新澄清了情況。簡單地說,程式透過將文字寫入終端來告訴終端顯示文字。一個不太明顯的事實是,程式可以透過向終端寫入非顯示字元來命令終端執行各種其他操作(例如,移動遊標或擦除(部分)螢幕)。有一些單獨的字元可以執行某些操作(例如,退格鍵和回車鍵向左移動,製表符向右移動)。但通常它們是字元序列,幾乎總是以 Escape 開頭,因此它們被稱為「轉義序列」。早在 20 世紀 70 年代和 80 年代,終端是硬體產品,每個供應商都選擇了自己的轉義序列,這很混亂。隨著時間的推移,標準已經發展

一組有趣的轉義序列是選擇圖形呈現 (SGR)家庭,控制著如何顯示可顯示的文字。這包括粗體、斜體、底線和顏色等屬性。通常,在以預設樣式以外的樣式顯示文字後,程式將嘗試將終端返回到其預設顯示方案。有轉義序列可以轉離開 粗體、斜體和底線,但它們的支撐範圍不如打開這些屬性的支撐範圍大。有轉義序列可以將顏色設定為黑色背景上的白色前景,但這並不是很好,因為使用者可能更喜歡不同的預設方案。因此,使用顏色的程式通常會透過傳送重設序列來結束,並將終端切換到屬性中指定的預設顯示方案。

長話短說 像這樣的程式pwd只顯示文本,只顯示文本。以彩色顯示文字的程式透過將終端重置為其預設顏色而結束,並且它們保持有效,直到其他程式編寫轉義序列來再次更改它們。

這就留下了一個問題:為什麼終端開始在黑底白字模式下?也許您的初始化檔案之一( 、 等)中有一些.profile明確.bashrc設定這些顏色的內容。

解決方案是將預設屬性變更為您想要的(例如,黑色背景上的白色文字)。您似乎已經找到了合適的對話框;只需將螢幕背景顏色變更為黑色,然後按一下「確定」即可。

相關內容