Nenhum valor para $ TERM e nenhum -T especificado

11

Eu atualizei recentemente (com apt-get dist-upgrade ) minhas caixas Kubuntu e Lubuntu Linux, e agora toda vez que eu faço logon em uma dessas máquinas, recebo esta mensagem:

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

Aqui está uma captura de tela da mensagem exata:

Isso aconteceu tanto na minha máquina Lubuntu quanto na máquina Kubuntu, e não foi um problema até que eu atualizasse; então eu suspeito que não foi erro do usuário.

Como posso corrigir isso?

UPDATE

Eu rastreei isso até o meu arquivo .bashrc, que está sendo chamado pelo meu arquivo .profile. No entanto, o fato de que meu arquivo .bashrc agora é executado quando eu faço um login GUI, enquanto ele não fez antes de eu atualizar é um pouco estranho. E não, eu não modifiquei meu arquivo .bashrc ou meu .profile recentemente. Além disso, o bash não é meu shell padrão.

O problema é que estou chamando tput no meu arquivo .bashrc para configurar variáveis para uso na adição de cores ao prompt. Mas no momento (inapropriado) quando meu arquivo .bashrc agora é executado, $TERM não está definido.

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)

Pergunta atualizada: Como devo corrigir isso? Devo definir $TERM eu mesmo? Ou devo apenas não definir essas variáveis se $TERM não estiver definido?

UPDATE 2

Uma solução que tentei foi verificar se $TERM estava definido. Mas isso não parece funcionar; Eu ainda recebi a mesma mensagem de erro. Aqui está o código:

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

Portanto, aparentemente $TERM foi definido, mas tput ainda concluiu que não era.

    
por Sildoreth 02.03.2015 / 19:31

6 respostas

8

O que basicamente funcionou para mim foi verificar se o shell era um shell interativo. Eu baseei a solução neste outro post em unix.stackexchange: Como verificar se um shell é login / interactive / batch .

Então, o código da solução foi:

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
    
por Sildoreth 04.03.2015 / 22:03
4

Se você fizer isso

if tty -s
then
    : # your tput commands
fi

Isso resolverá seu problema. Sem a opção -s tty irá mostrar o seu tty ou escrever "not a tty"

    
por Robert Jacobs 04.03.2015 / 23:21
2

Tente abrir o terminal (não importa qual, até mesmo tty1 serve) e execute esta linha

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

Você será presenteado com a escolha do emulador de terminal padrão para x window. Escolha um selecionando o número e reinicie depois de terminar.

$ sudo update-alternatives --config x-terminal-emulador
Existem 6 opções para o emulador x-terminal alternativo (fornecendo / usr / bin / x-terminal-emulator).

  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:  
    
por Sergiy Kolodyazhnyy 02.03.2015 / 23:46
2

Para mim, adicionando

export TERM=xterm

para /etc/profile foi a única coisa que resolveu o problema. Na verdade, o erro nos deu uma dica: No value for $TERM

    
por jjmerelo 15.03.2015 / 08:59
2

[ Cenário diferente, mas o mecanismo de pesquisa me direciona primeiro]

Quando o erro " tput: Nenhum valor para $ TERM e nenhum -T especificado " ocorre em um contêiner Docker (para mim, ao abrir um zsh chamada de shell docker exec -it <container> zsh (-i para interativo)) a única maneira de corrigir isso, era definir a variável como ENV TERM xterm-256color no Dockerfile para esta imagem.

Abordagens como RUN export TERM=xterm-256color ou RUN echo "export TERM=xterm-256color" >> ~/.zshrc não foram bem-sucedidas. Outros valores para TERM também são possíveis.

    
por mga0 14.01.2017 / 19:31
1

O diálogo de erro é devido à correção do bug # 678421 , então é minha culpa. ;) Ele informa sobre erros devido a alguns comandos em um dos seus arquivos de configuração. Se você rolar para o topo, você pode ver qual arquivo está causando as mensagens de erro.

Possivelmente a resposta de Serg é suficiente para se livrar do diálogo de aviso.

Editar:

Gostaria de adicionar algumas coisas devido à pergunta atualizada.

Ao contrário de antes, /usr/sbin/lightdm-session agora é executado sob bash (anteriormente sh). É por isso que o fornecimento de ~/.profile resulta em ~/.profile sourcing ~/.bashrc . Possivelmente, isso significa que o conteúdo padrão de ~/.profile deve ser alterado.

A coisa mais fácil que você pode fazer para corrigir isso é, como você sugeriu, chamar somente tput se $ TERM estiver definido.

    
por Gunnar Hjalmarsson 03.03.2015 / 00:01