Terminal

當其輸出通過管道傳輸時,程序如何消除轉義碼?

  • November 1, 2020

這是一個非常奇怪的標題,但我無法表達這個問題:

當我kitty --version在終端中執行時,它將其版本列印到標準輸出,但是文本的樣式和顏色:

在此處輸入圖像描述

為了實現這一點,該過程必須將 ANSI 轉義碼輸出到標準輸出,但是當我 hexdump 輸出時我看不到它們:

$ kitty --version | xxd -g 1 -c 10 -u
00000000: 6B 69 74 74 79 20 30 2E 31 39  kitty 0.19
0000000a: 2E 31 20 63 72 65 61 74 65 64  .1 created
00000014: 20 62 79 20 4B 6F 76 69 64 20   by Kovid 
0000001e: 47 6F 79 61 6C 0A              Goyal.

我希望在這里至少看到一些轉義字元和其他 ANSI 序列,但我沒有。這使我相信它kitty能夠“預測”其輸出是否會出現在可以處理轉義碼的終端中。

它怎麼能做到這一點?或者它可能是終端仿真器的一個特性?

閱讀man isatty,或https://linux.die.net/man/3/isatty

isatty - test whether a file descriptor refers to a terminal

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