답변:
$TERM
?$TERM
변수는 해당 터미널의 기능을 활용하는 응용 프로그램에서 사용할 수 있습니다.
예를 들어, 프로그램이 컬러 텍스트를 표시하려면 먼저 사용중인 터미널이 컬러 텍스트를 지원하는지 확인한 다음 지원하는 경우 컬러 텍스트를 수행하는 방법을 찾아야합니다.
이것이 작동하는 방식은 시스템이 알려진 터미널 라이브러리와 그 기능을 유지한다는 것입니다. 대부분의 시스템에서 이것이 사용됩니다 /usr/share/terminfo
(termcap도 있지만 더 이상 사용되지 않는 레거시입니다).
빨간색 텍스트를 표시하려는 프로그램이 있다고 가정 해 봅시다. 기본적으로 terminfo 라이브러리를 호출하여 " xterm 터미널에 빨간색 텍스트를 보내야하는 바이트 시퀀스를 제공합니다 "라고 말합니다 . 그런 다음 해당 바이트를 가져 와서 인쇄합니다.
을 수행하여 직접 시도 할 수 있습니다 tput setf 4; echo hi
. setf
terminfo 기능 을 가져 와서 4
원하는 색상 인 매개 변수를 전달합니다 .
이제 막 출시 된 반짝이는 새로운 터미널 에뮬레이터가 있고 시스템의 terminfo 라이브러리에 아직 정의가 없습니다. 응용 프로그램이 무언가를 수행하는 방법을 찾으려면 터미널을 알 수 없으므로 실패합니다.
터미널이이 문제를 해결하는 방법은 터미널이 누군지 거짓말하는 것입니다. 그래서 당신의 그놈 터미널은 " 나는 xterm입니다 "라고 말합니다.
Xterm은 X11이 시작된 이래로 사용 된 매우 기본적인 터미널이므로 대부분의 터미널 에뮬레이터가 지원하는 기능을 지원합니다. 따라서 gnome 터미널은 xterm이라고 말하면 terminfo 라이브러리에 정의가있을 가능성이 큽니다.
터미널 유형에 대한 단점은 터미널이 실제로 xterm보다 많은 것을 지원할 수 있다는 것입니다 (예를 들어, 많은 새로운 터미널은 256 색을 지원하지만 오래된 터미널은 16 만 지원함). 따라서 장단점이 있거나 더 많은 기능을 얻거나 더 호환성이 있습니다. 대부분의 터미널은 호환성을 높이기 위해로 광고합니다 xterm
.
이를 재정의하려는 경우 많은 터미널에서 동작을 구성하는 방법을 제공합니다. 그러나 당신은 또한 할 수 있습니다 export TERM=gnome-terminal
.
$TERM
설정 했다고 추측하고있다xterm
TERM
환경 변수 단말 나타내는 유형 이 아닌 단말기 어플리케이션 . TERM
특정 목적이 있습니다. 해당 터미널에서 실행중인 응용 프로그램에 터미널과 상호 작용하는 방법을 알려줍니다.
응용 프로그램은 인쇄 할 수없는 문자를 포함하고 커서 이동, 화면 일부 지우기, 현재 색상 변경 등과 같은 효과가있는 이스케이프 시퀀스를 작성하여 터미널과 상호 작용합니다. 옛날에는 물리적 터미널의 브랜드가 서로 다릅니다. 탈출 시퀀스 세트. 따라서 운영 체제는 터미널 유형 및 해당 특성의 데이터베이스를 유지 보수합니다. 기존 데이터베이스는 termcap (“TERMinal CAPabilities”)입니다. 많은 최신 시스템 및 응용 프로그램이 terminfo 로 전환되었습니다 . 두 데이터베이스 모두 터미널 유형의 이름으로 색인화되며 응용 프로그램은 TERM
환경 변수 에서 터미널 유형 이름을 사용하여 쿼리합니다 .
오늘날 대부분의 터미널 은 몇 가지 공통된 확장 세트를 가진 표준 이스케이프 시퀀스 세트를 사용 하므로 여러 가지 값이 표시되지 않습니다 TERM
. 대부분의 GUI 터미널 에뮬레이터는 기존의 X 터미널 인 xterm 과 호환됩니다 (이것은 여전히 사용되고 유지됩니다).
xterm과 다른 터미널 에뮬레이터는 자신의 이름으로 터미널 데이터베이스에 자신의 항목을 추가 할 수 있습니다. 그러나 이것은 원격 쉘과 잘 맞지 않습니다. 예를 들어 B에서 A로 ssh를 통해 시작 되었기 때문에 시스템 A에서 실행되지만 시스템 B에서 표시되는 프로그램은 시스템 A에서 터미널 데이터베이스를 조회해야합니다. ssh와 같은 원격 로그인 방법은 TERM
환경 변수를 통해 전달 하지만 이것은 B의 터미널 데이터베이스에 A의 사용자 값을 입력 한 경우에만 유용합니다. 따라서 많은 터미널 에뮬레이터 TERM=xterm
가 널리 알려져 있습니다.
터미널과 크게의 차이점은 응용 프로그램이 터미널과 상호 작용하는 방식이 아니라 터미널이 사용자와 상호 작용하고 환경에 맞도록하는 방식에서 비롯됩니다. 예를 들어, Gnome Terminal은 Gnome에서 잘 보이고 탭과 기타 기능을 제공합니다. Konsole은 KDE에서보기 좋으며 탭과 기타 기능을 제공합니다. urxvt에는 작은 메모리 요구 사항이 있습니다. Console2는 Windows에서 실행됩니다. screen과 tmux는 다른 부모 터미널에 연결될 수있는 세션을 제공합니다. 등등. 이러한 기능 중 어느 것도 터미널에서 실행되는 응용 프로그램과 차이가 없으므로 대부분의 터미널 에뮬레이터는를 사용 TERM=xterm
합니다.
쉘이 어떤 터미널을 실행하고 있는지 확인하려면, 쉘의 부모를보십시오 :
ps -p$PPID
ps -p$PPID
은 내가 실행중인 터미널을 알려주지 않는 것 같습니다. 또는 적어도 내가 이해하는 방식으로는 아닙니다. 예제 출력 / 응답이 있습니까?
환경 변수 TERM은 사용중인 터미널을 의미하지 않습니다.
환경 변수 TERM은 텍스트 창의 기능에 대한 식별자를 포함합니다. 'man 5 terminfo'를 참조로 사용하여> 'infocmp'명령을 사용하여 이러한 가능성에 대한 자세한 목록을 얻을 수 있습니다.
내장 된 색상 지시문이있는 텍스트를 생성 할 때 msgcat은 TERM 변수를 확인합니다. 오늘날 텍스트 창은 일반적으로 8 색 이상을 지원합니다. 그러나 TERM 변수가 8 개의 지원되는 색상 만 나타내는 식별자로 설정되어 있어도 텍스트 창은 16 개 이상의 색상을 지원합니다. 다음과 같은 경우 TERM 변수를 다른 값으로 설정하는 것이 좋습니다.
xterm 은 대부분 16 가지 색상을 지원하도록 만들어졌습니다. 88 또는 256 색 (둘다는 아님)을 지원하여 만들 수도 있습니다. TERM을 xterm-16color, xterm-88color 또는 xterm-256color로 설정할 수 있습니다. rxvt
rxvt 는 종종 16 가지 색상을 지원하도록 만들어졌습니다. TERM을 rxvt-16color로 설정할 수 있습니다. 곤솔
곤솔 역시 16 가지 색상을 지원하도록 만들어졌습니다. TERM을 konsole-16color 또는 xterm-16color로 설정할 수 있습니다.
TERM을 설정 한 후 'msgcat --color = test'를 호출하고 출력이 적절한 색상 맵처럼 보이는지 확인하여이를 확인할 수 있습니다. 환경 변수 TERM은 텍스트 창의 기능에 대한 식별자를 포함합니다. 'man 5 terminfo'를 참조로 'infocmp'명령을 사용하여 이러한 가능성에 대한 자세한 목록을 얻을 수 있습니다.