예를 들어 일부 터미널 응용 프로그램을 만들려고 하기 때문에 프로그램이 터미널이 색상을 지원하는지 확인하는 방법이 궁금합니다.이것, 그런데 출력 색상이 없는 것 같고(단색 회색 텍스트만 있음) 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
파일로 캡처할 수 있습니다.