$ TERM에 값이없고 -T가 지정되지 않았습니다.


22

최근에 apt-get dist-upgradeKubuntu 및 Lubuntu Linux 상자를 (로 ) 업그레이드 했으며 이제 이러한 컴퓨터 중 하나에 로그인 할 때마다 다음 메시지가 표시됩니다.

tput: No value for $TERM and no -T specified

정확한 메시지의 스크린 샷은 다음과 같습니다. tput : $ TERM에 값이없고 -T가 지정되지 않았습니다.

이것은 내 Lubuntu 컴퓨터와 Kubuntu 컴퓨터에서 모두 발생했으며 업그레이드 후까지는 문제가되지 않았습니다. 사용자 오류가 아닌 것 같습니다.

이 문제를 어떻게 해결할 수 있습니까?

최신 정보

나는 이것을 내 .bash 파일로 추적했다. 내 .profile 파일에 의해 호출된다. 그래도 GUI 로그인을 할 때 내 .bashrc 파일이 실행되는 반면 업그레이드하기 전에는 그렇지 않은 것이 약간 이상합니다. 그리고 아니요. 최근에 .bashrc 파일이나 .profile을 수정하지 않았습니다. 또한 bash는 기본 쉘이 아닙니다.

문제는 tput프롬프트에 색상을 추가하는 데 사용할 변수를 설정하기 위해 .bashrc 파일을 호출한다는 것 입니다. 그러나 .bashrc 파일이 이제 실행되는 (부적절한) 시간에 $TERM설정되지 않았습니다.

fgRed=$(tput setaf 1)     ; fgGreen=$(tput setaf 2)  ; fgBlue=$(tput setaf 4)
fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
fgWhite=$(tput setaf 7)   ; fgBlack=$(tput setaf 0)
bgRed=$(tput setab 1)     ; bgGreen=$(tput setab 2)  ; bgBlue=$(tput setab 4)
bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
bgWhite=$(tput setab 7)   ; bgBlack=$(tput setab 0)

업데이트 된 질문 : 이 문제를 어떻게 해결해야합니까? 내가 $TERM직접 설정 해야합니까? 또는 설정 $TERM되지 않은 경우이 변수를 설정하지 않아야합니까?

업데이트 2

내가 시도한 한 가지 해결책 $TERM은 설정 되어 있는지 확인하는 것이 었습니다. 그러나 이것은 효과가 없었습니다. 여전히 같은 오류 메시지가 나타납니다. 코드는 다음과 같습니다.

if [ ! "$TERM" = "" ]; then
  #Do stuff here
fi

그래서 분명히 $TERM 했다 설정할 수 있지만 tput여전히 아니었다 결론을 내렸다.


1
.profile기본 쉘에 상관없이 실수하지 않으면 실행
Sergiy Kolodyazhnyy

@Serg이지만 GUI 쉘 로그인 중에? 또한, 나는 항상이 문제를 보지 못했습니다.
Sildoreth

음, 그래, 그것의 사용자 loging에 따라 실행 된해야하며, 이것은 당신이하고 있던 정확히입니다
세르지 Kolodyazhnyy

답변:


13

궁극적으로 나를 위해 일한 것은 쉘이 대화 형 쉘인지 여부를 확인하는 것이 었습니다. 나는 unix.stackexchange : 쉘이 login / interactive / batch인지 확인하는 다른 게시물에 대한 해결책을 기반으로했습니다 .

솔루션의 코드는 다음과 같습니다.

if [[ $- == *i* ]]; then
  fgRed=$(tput setaf 1)     ; fgGreen=$(tput setaf 2)  ; fgBlue=$(tput setaf 4)
  fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
  fgWhite=$(tput setaf 7)   ; fgBlack=$(tput setaf 0)
  bgRed=$(tput setab 1)     ; bgGreen=$(tput setab 2)  ; bgBlue=$(tput setab 4)
  bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
  bgWhite=$(tput setab 7)   ; bgBlack=$(tput setab 0)
fi

아하, 그것은 우아한 해결책입니다. :)
Gunnar Hjalmarsson 2016 년

2
이 안에 있다면 .bashrc놀라운 일입니다. 기본값 .bashrc은 : # If not running interactively, don't do anything case $- in *i*) ;; *) return;;이므로 대화식이 아닌 한 설정을 적용해서는 안됩니다.
muru

@muru 내 .bashrc 파일은 기본값이 아닙니다. :)
Sildoreth

하지만 어디서 그랬어? 안에 .bashrc?
jjmerelo

파일 상단에 이것을 넣으면 더 깨끗합니다. [[ $- == *i* ]] || returnRef : ( askubuntu.com/a/1070182/362122 )
Klik

9

이렇게하면

if tty -s
then
    : # your tput commands
fi

문제를 해결합니다. -s 옵션이 없으면 tty는 tty를 표시하거나 "tty a not tty"를 씁니다.


설명 tty의 행 서, 페이지는 "표준 입력에 접속 된 단말기의 파일 이름을 인쇄"이다. 스크립트의 stdin이 파이프 인 경우이 테스트는 실패합니다. 결과적으로 프로그램 은 입력 이 파이프에서 나오기 때문에 출력 에서 색상 인쇄를 중지합니다 . 어쩌면 (영어로 : "stdout이 터미널에 연결되어 있습니까?") 당신이 정말로 원하는 것입니까? 이렇게 하면 출력이 터미널로 이동하는 경우 에만 색상 이 표시되고 출력을 파일로 리디렉션하거나 출력하는 경우 이상한 터미널 코드가 표시되지 않습니다 (예 :) . test -t 1less
TheDudeAbides

6

나를 위해 추가

export TERM=xterm

에이 /etc/profile문제를 해결하는 유일한 일이었다. 실제로, 그 오류는 우리에게 힌트를 주었다 :No value for $TERM


4

[ 시나리오가 다르지만 검색 엔진이 먼저 여기로 안내합니다.]

Docker 컨테이너 에서 " tput : $ TERM에 값이없고 -T가 지정되지 않음 "오류가 발생하는 경우 (나를 위해docker exec -it <container> zsh (대화식의 -sh를 호출 zsh 쉘을 )이 문제를 해결하는 유일한 방법은 변수를 설정하는 것이 었습니다 ENV TERM xterm-256color이 이미지의 Dockerfile에서 와 같이 .

접근 은 성공 RUN export TERM=xterm-256color 했거나 RUN echo "export TERM=xterm-256color" >> ~/.zshrc성공하지 못했습니다. TERM에 대한 다른 값들도 가능하다.


3

터미널을 열고 (tty1조차도 상관 없습니다)이 라인을 실행하십시오

sudo update-alternatives --config x-terminal-emulator

x 창에 대한 기본 터미널 에뮬레이터를 선택할 수 있습니다. 숫자를 선택하여 하나를 선택하고 완료 후 재부팅하십시오.

$ sudo update-alternatives --config x-terminal-emulator
대체 x-terminal-emulator (/ usr / bin / x-terminal-emulator 제공)를위한 6 가지 선택이 있습니다.

  Selection    Path                             Priority   Status
------------------------------------------------------------
  0            /usr/bin/gnome-terminal.wrapper   40        auto mode
  1            /usr/bin/gnome-terminal.wrapper   40        manual mode
  2            /usr/bin/koi8rxterm               20        manual mode
* 3            /usr/bin/lxterm                   30        manual mode
  4            /usr/bin/sakura                   40        manual mode
  5            /usr/bin/uxterm                   20        manual mode
  6            /usr/bin/xterm                    20        manual mode

Press enter to keep the current choice[*], or type selection number:  

이 작업을 시도하면 "링크 그룹 x-terminal-emulator에 하나의 대안 만 있습니다. [...] 구성 할 항목이 없습니다"라는 메시지가 표시됩니다. 이것은 내 쿠분투 머신에 있습니다.
Sildoreth

예를 들어 다음 gnome-terminal과 같은 다른 터미널 에뮬레이터를 설치하십시오.sakura
Sergiy Kolodyazhnyy

나는 정확히 같은 문제가 있었다. 를 선택했습니다 sakura. 그러나 이것은 gnome 터미널 래퍼에 문제가있는 것 같습니다. 그렇다면 왜 고치지 않습니까?
jjmerelo

실제로 문제를 해결하지는 않습니다.
jjmerelo

2
@jjmerelo OP가 나중에 자신의 답변에서 밝힌 바와 같이, 그는 .bashrc 파일에 줄이있어 오류가 발생했습니다. 그놈 터미널 래퍼는 문제가되지 않습니다. 내 생각에 처음에는 $ TERM 변수가 설정되지 않았으며, 그 답변에서 언급 된 또 다른 사용자 Gunnar였습니다.
Sergiy Kolodyazhnyy

1

오류 대화 상자는 버그 # 678421 의 수정으로 인한 것이므로 내 잘못입니다. ;) 구성 파일 중 하나의 일부 명령으로 인한 오류에 대해 알려줍니다. 맨 위로 스크롤하면 오류 메시지를 일으키는 파일을 확인할 수 있습니다.

아마도 Serg의 대답은 경고 대화 상자를 제거하기에 충분합니다.

편집하다:

업데이트 된 질문으로 인해 몇 가지 사항을 추가하고 싶습니다.

이전과 달리 /usr/sbin/lightdm-session이제 bash (이전 sh)에서 실행됩니다. 그것이 소싱 ~/.profile결과가 ~/.profile소싱되는 이유 ~/.bashrc입니다. 아마도 이것은 기본 내용 ~/.profile이 변경되어야 함을 의미합니다 .

제안한대로 $ TERM이 설정된 경우에만 tput을 호출하는 것이 가장 쉬운 방법입니다.


$ TERM이 설정되어 있는지 확인하려고 시도했지만 작동하지 않는 것 같습니다.
Sildoreth

@ Sildoreth : 그렇게하기위한 정확한 코드를 알려주시겠습니까? (질문을 다시 편집하십시오.)
Gunnar Hjalmarsson

질문에 추가
Sildoreth

@Sildoreth : 봤어요. 하위 프로세스에서 tput이 호출 되었기 때문일 수 있습니다. 어쨌든, 당신은 그것을 다루는 좋은 방법을 찾았습니다.
Gunnar Hjalmarsson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.