bash는 로그인 시 $TERMINFO를 읽지 않습니다(SSH를 통해).

bash는 로그인 시 $TERMINFO를 읽지 않습니다(SSH를 통해).

OpenVZ Fedora 20 VPS가 있고 SSH를 통해 연결하면 에 저장된 termcap 파일이 설정되었음에도 불구하고 $XDG_DATA_HOME/terminfo/x/xterm-termite읽혀지지 않습니다 TERMINFO=$XDG_DATA_HOME/terminfo. subshell bash를 실행하면 제대로 작동합니다. 아니면 exec bash내 끝에 추가하면 .profile잘 작동합니다.

나는 보았다이 문제그리고 그것이 같은 것일지도 모른다고 의심하십시오. 하지만 /usr/bin어쨌든 나는 bash 버전으로 로그인했습니다

$ echo $BASH
/usr/bin/bash
$ which bash
/usr/bin/bash

또한 VPS에서 Ubuntu 13.10을 사용해 보았지만 동일한 문제가 발생했습니다.

Patrick의 질문은 정말로 저를 생각하게 만들었고 VPS의 기본 운영 체제가 REHL이라는 것을 알고 있습니다. 이것이 어떤 식으로든 영향을 미칠까요?


라는 파일을 받았어요environment내 에서 디렉토리 가 .profile.$TERMINFOterminfoXDG_DATA_HOME

$ echo $TERMINFO
/home/evan/.local/share/terminfo
$ echo $XDG_DATA_HOME
/home/evan/.local/share
$ find $TERMINFO
/home/evan/.local/share/terminfo
/home/evan/.local/share/terminfo/x
/home/evan/.local/share/terminfo/x/xterm-termite
$ echo $TERM
xterm-termite

이것은 내 Linode VPS에서 잘 작동합니다.

답변1

Bash는 시작 시(대부분의 프로그램과 마찬가지로) 또는 변수가 변경될 때만 terminfo 데이터베이스 항목을 로드합니다 TERM. TERMINFO변수 변경은 즉시 적용되지 않습니다. 이는 terminfo 항목이 로드될 때만 사용되며 다시 로드를 트리거하지 않습니다.

이것을 실행하면 및 의 현재 값을 기반으로 터미널 항목을 로드하는 exec bash새로운 bash 인스턴스가 시작됩니다 .TERMTERMINFO

에 할당하여 terminfo 데이터베이스를 다시 로드할 수 있습니다 TERM. Bash는 최적화 TERM=$TERM하고 데이터를 다시 로드하지 않으므로 중간 값을 사용해야 합니다.

TERMINFO=…
# Reload the terminfo entry to take the new value of $TERMINFO into account
old_TERM=$TERM; TERM=dumb; TERM=$old_TERM; unset old_TERM

관련 정보