web-dev-qa-db-fra.com

Pas de valeur pour $ TERM et pas de -T spécifié

J'ai récemment mis à niveau (avec apt-get dist-upgrade) mes boîtes Linux Kubuntu et Lubuntu, et maintenant à chaque fois je me connecte à l'une de ces machines, le message suivant s'affiche:

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

Voici une capture d'écran du message exact: tput: No value for $TERM and no -T specified

Cela s'est produit à la fois sur ma machine Lubuntu et sur ma machine Kubuntu, et ce ne fut un problème que depuis la mise à niveau. donc je soupçonne que ce n'était pas une erreur de l'utilisateur.

Comment puis-je réparer cela?

UPDATE

Je l'ai retrouvé dans mon fichier .bashrc, appelé par mon fichier .profile. Cependant, le fait que mon fichier .bashrc s'exécute maintenant lorsque je me connecte à une interface utilisateur alors qu'il ne l'était pas avant la mise à niveau est un peu étrange. Et non, je n'ai pas modifié mon fichier .bashrc ou mon .profile récemment. En outre, bash n'est pas mon shell par défaut.

Le problème est que j'appelle tput dans mon fichier .bashrc pour configurer des variables à utiliser pour ajouter de la couleur à l'invite. Mais au moment (inapproprié) où mon fichier .bashrc est maintenant exécuté, $TERM n'est pas défini.

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)

Question mise à jour: Comment dois-je résoudre ce problème? Dois-je définir $TERM moi-même? Ou devrais-je tout simplement pas définir ces variables si $TERM n'est pas défini?

PDATE 2

Une solution que j'ai essayée était de vérifier si $TERM était défini. Mais cela n'a pas semblé fonctionner. J'ai toujours le même message d'erreur. Voici le code:

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

Donc, apparemment, $TERM était défini , mais tput a néanmoins conclu que ce n'était pas le cas.

19
Sildoreth

Ce qui a finalement fonctionné pour moi a été de vérifier si le Shell était un Shell interactif. J'ai basé la solution sur cet autre message à l'adresse unix.stackexchange: Comment vérifier si un shell est connecté/interactif/batch .

Le code de la solution était donc le suivant:

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
13
Sildoreth

Si tu fais ça

if tty -s
then
    : # your tput commands
fi

Cela résoudra votre problème. Sans l'option -s, tty affichera votre tty ou écrira "not a tty"

9
Robert Jacobs

Pour moi, ajouter

export TERM=xterm

/etc/profile était la seule chose qui résolve le problème. En fait, l'erreur nous a donné un indice: No value for $TERM

5
jjmerelo

[ Scénario différent, mais le moteur de recherche me mène ici en premier]

Lorsque " tput: aucune valeur pour $ TERM ni aucun -T spécifié " une erreur se produit dans un conteneur Docker (pour moi, lors de l'ouverture d'un zsh Shell appelant docker exec -it <container> zsh (-i pour interactive)), le seul moyen de résoudre ce problème consistait à définir la variable comme ENV TERM xterm-256color dans le fichier de docker pour cette image.

Des approches telles que RUN export TERM=xterm-256color ou RUN echo "export TERM=xterm-256color" >> ~/.zshrc ont échoué. D'autres valeurs pour TERM sont également possibles.

3
mga0

Essayez d’ouvrir le terminal (peu importe ce que même tty1 fera) et lancez cette ligne

Sudo update-alternatives --config x-terminal-emulator

On vous présentera le choix de l'émulateur de terminal par défaut pour la fenêtre x. Choisissez-en un en sélectionnant le numéro et redémarrez après avoir terminé.

$ Sudo update-alternatives --config x-terminal-emulator
Il existe 6 choix pour l’émulateur alternatif x-terminal (fournissant/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:  
2

La boîte de dialogue d'erreur est due à la correction de bogue n ° 678421 , c'est donc ma faute. ;) Il vous informe des erreurs dues à une ou plusieurs commandes dans l’un de vos fichiers de configuration. Si vous faites défiler vers le haut, vous pouvez voir quel fichier est à l'origine des messages d'erreur.

Peut-être que la réponse de Serg est suffisante pour supprimer le dialogue d'avertissement.

Modifier:

Voudrais ajouter quelques éléments à la suite de la mise à jour de la question.

À la différence d’avant, /usr/sbin/lightdm-session est maintenant exécuté sous bash (auparavant sh). C'est pourquoi son code source ~/.profile donne ~/.profile sourcing ~/.bashrc. Peut-être cela signifie-t-il que le contenu par défaut de ~/.profile devrait être modifié.

La solution la plus simple pour y remédier est, comme vous l’avez suggéré, d’appeler tput uniquement si $ TERM est défini.

1