Terminal
當其輸出通過管道傳輸時,程序如何消除轉義碼?
這是一個非常奇怪的標題,但我無法表達這個問題:
當我
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/isattyisatty - test whether a file descriptor refers to a terminal