终端“有颜色”的条件是什么?

终端“有颜色”的条件是什么?

我很好奇程序如何确定其终端支持颜色,因为我正在尝试创建一些终端应用程序,例如,但是它似乎没有输出颜色(只是纯灰色文本),并且在检查它java运行的环境时,我发现

HOME=/home/user
LANG=en_US.UTF-8
LOGNAME=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
SHELL=/bin/bash
SUDO_COMMAND=/usr/local/bin/minecraftd -d
SUDO_GID=1000
SUDO_UID=1000
SUDO_USER=user
TERM=xterm-256color
USER=root
USERNAME=root

其中有$TERM辅助颜色。

在检查另一个正确输出颜色的进程的环境后(仅供参考,它是 bash),我发现

GCC_COLORS=error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
HOME=/home/user
LANG=en_US.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=user
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42
MAIL=/var/mail/user
MYSQL_PS1=\u@\h [\c/\d]>
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/user
SHELL=/bin/bash
SHLVL=1
SSH_CLIENT=[irrelevant]
SSH_CONNECTION=[irrelevant]
SSH_TTY=/dev/pts/4
TERM=screen
TMUX=/tmp/tmux-1000/default,28912,0
TMUX_PANE=%3
USER=user
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_ID=c57
_=/usr/bin/tmux

其中也有$TERM辅助颜色。

我的问题是,程序如何确定是否支持颜色,因为我很难弄清楚。

答案1

的价值TERM如果其中之一为真,则表示颜色:

  • 程序用于TERM查找终端描述(在 terminfo 或 termcap 中)并查看该描述中的功能以查看它是否支持颜色,或者

  • 一个程序使用一些其他将该值与“颜色”相关联的机制(通常是硬编码)。

Java 应用程序不会使用终端数据库,除非很少(很少到您可以理所当然地认为这是不可能的)。它可能会使用一些硬编码的行为(但随后它必须构造转义序列并编写它们——同样,不经常这样做)。

一些程序其中生成转义序列将检查它们的输出是否被重定向(不转到终端),并将抑制这些转义序列以使日志文件等更易于阅读。您可以通过运行它们来解决这些问题script(这使得运行的进程script“看到”它正在写入终端,同时script将输出捕获到自己的typescript文件中)。

相关内容