J'ai récemment mis à niveau (avec apt-get dist-upgrade
) mes boîtiers Linux Kubuntu et Lubuntu, et maintenant chaque fois que je me connecte à l'une de ces machines, je reçois ce message:
tput: No value for $TERM and no -T specified
Voici une capture d'écran du message exact:
Cela s'est produit à la fois sur ma machine Lubuntu et sur ma machine Kubuntu, et ce n'était pas un problème avant ma mise à niveau; donc je soupçonne que ce n'était pas une erreur utilisateur.
Comment puis-je réparer cela?
MISE À JOUR
J'ai retrouvé cela dans mon fichier .bashrc, qui est appelé par mon fichier .profile. Cependant, le fait que mon fichier .bashrc s'exécute maintenant lorsque je me connecte à l'interface graphique alors qu'il ne l'était pas avant la mise à niveau est un peu bizarre. Et non, je n'ai pas modifié mon fichier .bashrc ou mon .profile récemment. De plus, 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 s'exécute maintenant, $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 résoudre ce problème? Dois-je $TERM
me fixer ? Ou devrais-je simplement ne pas définir ces variables si ce $TERM
n'est pas le cas?
MISE À JOUR 2
Une solution que j'ai essayée était de vérifier si elle $TERM
était réglée. Mais cela ne semblait pas fonctionner; J'ai toujours le même message d'erreur. Voici le code:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
Donc, apparemment, $TERM
c'était réglé, mais tput
toujours conclu que ce n'était pas le cas.
.profile
quel que soit le shell par défautRéponses:
Ce qui a finalement fonctionné pour moi était de vérifier si le shell était un shell interactif. J'ai basé la solution sur cet autre article sur unix.stackexchange: comment vérifier si un shell est login / interactif / batch .
Le code de la solution était donc:
la source
.bashrc
, je trouve cela surprenant. La valeur par défaut.bashrc
contient :,# If not running interactively, don't do anything
case $- in *i*) ;; *) return;;
donc vos paramètres ne doivent pas être appliqués sauf s'ils sont interactifs..bashrc
?[[ $- == *i* ]] || return
Réf: ( askubuntu.com/a/1070182/362122 )Si tu fais ça
Cela résoudra votre problème. Sans l'option -s, tty affichera votre tty ou écrira "not a tty"
la source
tty
sa page de manuel est "imprimer le nom de fichier du terminal connecté à l'entrée standard". Si le stdin de votre script est un tube, ce test échouera, avec pour conséquence que votre programme arrête d'imprimer les couleurs dans sa sortie juste parce que son entrée provient d'un tube. Peut-êtretest -t 1
(en anglais: "stdout est-il connecté à un terminal?") Est-ce vraiment ce que vous voulez? De cette façon, vous obtenez des couleurs uniquement si la sortie va vers un terminal, et vous ne verrez pas de codes de terminal étranges si vous redirigez sa sortie vers un fichier ou si vous la dirigez, disonsless
.Pour moi, ajouter
à
/etc/profile
était la seule chose qui a résolu le problème. En fait, l'erreur nous a donné un indice:No value for $TERM
la source
[ Scénario différent, mais le moteur de recherche me conduit ici en premier]
Lorsque l' erreur " tput: Aucune valeur pour $ TERM et aucun -T spécifié " ne se produit dans un conteneur Docker (pour moi, lors de l'ouverture d'un shell zsh appelant
docker exec -it <container> zsh
(-i pour interactif)), la seule façon de résoudre ce problème était de définir la variable commeENV TERM xterm-256color
dans le Dockerfile pour cette image.Des approches comme
RUN export TERM=xterm-256color
ou quiRUN echo "export TERM=xterm-256color" >> ~/.zshrc
n'ont pas réussi. D'autres valeurs pour TERM sont également possibles.la source
Essayez d'ouvrir le terminal (peu importe lequel, même tty1 fera l'affaire) et exécutez cette ligne
sudo update-alternatives --config x-terminal-emulator
Vous serez invité à choisir l'émulateur de terminal par défaut pour x window. Choisissez-en un en sélectionnant le numéro et redémarrez après avoir terminé.
$ sudo update-alternatives --config x-terminal-emulator
Il y a 6 choix pour l'alternative x-terminal-emulator (fournissant / usr / bin / x-terminal-emulator).
la source
gnome-terminal
ousakura
sakura
. Cependant, cela semble être un problème avec le wrapper de terminal gnome; si oui, pourquoi ne pas arranger ça?La boîte de dialogue d'erreur est due à la correction du bogue # 678421 , c'est donc ma faute. ;) Il vous informe des erreurs dues à certaines 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 se débarrasser de la boîte de dialogue d'avertissement.
Modifier:
J'aimerais ajouter quelques éléments en raison de la question mise à jour.
Contrairement à avant,
/usr/sbin/lightdm-session
est maintenant exécuté sous bash (auparavant sh). C'est pourquoi son sourcing de~/.profile
résultats dans le~/.profile
sourcing~/.bashrc
. Cela signifie peut-être que le contenu par défaut de~/.profile
doit être modifié.Comme vous l'avez suggéré, la chose la plus simple que vous puissiez faire pour le corriger est d'appeler tput uniquement si $ TERM est défini.
la source