많은 장소에서
가상 터미널과 실제 터미널에서 TERM
환경 변수는에 연결되는 프로그램에 의해 설정되며, login
로그온 한 후에 실행되는 대화식 쉘과 함께 상속됩니다. 정확하게 이런 일이 발생하는 곳은 시스템마다 다르며 터미널의 종류에 따라 다릅니다.
실제 직렬 단자는 전선의 다른 쪽 끝에있는 내용에 따라 유형이 다를 수 있습니다. 따라서 일반적으로 getty
프로그램은 터미널 유형을 지정하는 인수로 호출되거나 TERM
서비스 관리자의 서비스 구성 데이터에서 프로그램으로 전달 됩니다.
앞서 언급했듯이 커널 가상 터미널에는 고정 유형이 있습니다. 커널 가상 터미널 유형을 즉시 변경할 수있는 NetBSD와 달리 Linux 및 기타 BSD에는 커널의 내장 터미널 에뮬레이션 프로그램에서 단일 고정 터미널 유형이 구현되어 있습니다. Linux에서 해당 유형 linux
은 terminfo 데이터베이스 와 일치 합니다. (FreeBSD의 커널 터미널 에뮬레이션은 xterm
버전 9부터 제한된 하위 집합입니다.)
mingetty
또는 vc-get-tty
nosh 패키지를 사용하는 시스템 에서 프로그램은 가상 터미널과 만 통신 할 수 있음을 "인식"하고 프로그램이 컴파일 된 운영 체제에 적합한 "알려진"가상 터미널 유형을 고정 배선합니다.
- 시스템 시스템의 경우
/usr/lib/systemd/system/getty@.service
단위 파일 ( /lib/systemd/system/getty@.service
병합되지 않은 시스템) 에서이 내용을 볼 수 있습니다.환경 = TERM = 리눅스
에 TERM
전달 된 환경 에서 변수를 설정합니다 agetty
.
커널 가상 터미널의 경우 터미널 유형을 변경 하지 않습니다 . 커널의 터미널 에뮬레이터 프로그램은 결국 변경되지 않습니다. 유형을 변경하는 것은 올바르지 않습니다 . 특히, 이것은 커서 / 편집 키 CSI 시퀀스 인식을 방해합니다. linux
리눅스 커널 터미널 에뮬레이터가 보낸 CSI 시퀀스는 서로 다른 있습니다 xterm
또는 vt100
12월 VT 모드에서 GUI 터미널 에뮬레이터 프로그램에 의해 전송 된 CSI 시퀀스.
GUI 터미널 에뮬레이터는 SSH screen
터미널부터 의사 터미널을 사용 하는 많은 프로그램 중 하나입니다 . 터미널 유형은 의사 터미널의 마스터 측에서 실행중인 터미널 에뮬레이터 프로그램 및 구성 방법에 따라 다릅니다. 대부분의 GUI 터미널 에뮬레이터는 슬레이브 쪽에서 TERM
마스터 쪽의 터미널 에뮬레이션과 값 이 같은 변수를 사용하여 프로그램을 시작합니다 . SSH 서버와 같은 프로그램은 연결의 클라이언트쪽에있는 터미널 유형을 "통과"하려고 시도합니다. 일반적으로 터미널 에뮬레이션 중에서 선택할 수있는 일부 메뉴 또는 구성 옵션이 있습니다.
쥐는 손
색상 기능을 감지하는 올바른 방법은 스크립트에서 터미널 유형 목록을 고정하는 것이 아닙니다 . 색상을 지원하는 수많은 터미널 유형이 있습니다.
올바른 방법은 터미널 유형에 대해 termcap / terminfo가 무엇을 말하는지 보는 것입니다.
색상 = 0
tput Co> / dev / null 2> & 1 인 경우
그때
"tput Co`"테스트 -gt 2 && colour = 1
elif tput colors> / dev / null 2> & 1
그때
"입력 색상"테스트 -gt 2 && colour = 1
fi
추가 자료
- Jonathan de Boyne Pollard (2018).
TERM
. nosh 가이드 . 소프트웨어.