这是一个很奇怪的标题,但我很难清楚地表达这个问题:
当我在终端中运行时,kitty --version
它会将其版本打印到标准输出,但是文本的样式和颜色如下:
为了实现这一点,进程必须将 ANSI 转义码输出到标准输出,但是当我十六进制转储输出时我看不到它们:
$ 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
能够“预测”其输出是否会出现在可以处理转义码的终端中。
它怎么能做到这一点呢?或者它可能是终端仿真器的一个功能?
答案1
阅读man isatty
, 或https://linux.die.net/man/3/isatty
isatty - test whether a file descriptor refers to a terminal