Bash

彩色終端輸出忽略復位序列。顏色繼續

  • July 31, 2017

我擺弄了幾個小時,找不到解決方案…

假設我將其列印到終端*(在執行新 Linux Mint 的 VM 的基因組終端中使用 bash 和 zsh 進行測試)*:

python3
print("\033[41mFOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\033[0m BAR")
  • \033[41m為後面的文本啟用紅色背景。
  • \033[0m將背景重置為預設值。
  • 假設有足夠的O來生成一個輸出,該輸出正好填滿終端中的一行半。

在一個新的終端中,輸出看起來像這樣(就像我預期的那樣):

|FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
|=================================|
|OOOOOOOOOOOOOO BAR               |
|==============                   |
|                                 |
  • 每個帶有 a 下劃線的字元=都有紅色背景。
  • |定義終端的邊界。

所以我們看到FOO...有紅色背景和BAR沒有紅色背景。

如果我再次執行該命令,我會得到:

|FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
|=================================|
|OOOOOOOOOOOOOO BAR               |
|==============    ===============|
|                                 |

BAR這條線繼續變紅之後……我不知道為什麼?任何的想法?

Mac OS X 上的 iTerm2 也會在彩色文本繞過可用列時執行此操作。BAR一種解決方法可能是在通過CSI Ps K Erase in Line (EL) 控制序列寫入後擦除到行尾,例如

$ perl -e 'print "\e[41m".("a"x120)."\e[0mBAR\e[K"'

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