web-dev-qa-db-fra.com

que fait réellement "export TERM = linux" dans un script

Mon script bash est très bruyant lorsqu'il est exécuté sur un serveur via ssh.

+ Sudo apt-get install -yqq nodejs
debconf: unable to initialize frontend: Dialog
debconf: (Dialog frontend will not work on a dumb terminal, an emacs Shell buffer, or without a controlling terminal.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin:

Une des suggestions que j’ai vu affichées sur le site était d’exporter TERM = linux

Y a-t-il des effets secondaires? Est-ce une bonne idée de faire au début du script, comme ceci:

#!/bin/bash
set -e
set -x
TERM=linux

La commande export TERM=linux définit l'émulateur de terminal sur linux. En fonction de l'environnement et des capacités de la console que vous utilisez, certaines émulations fonctionneront mieux que d'autres.

Le paramètre par défaut TERM pour Ubuntu est xterm. Vous pouvez vérifier votre paramètre TERM en exécutant echo $TERM.

Vous devrez peut-être vérifier auprès du fournisseur de l'application que vous exécutez pour connaître le meilleur émulateur de terminal recommandé pour leur programme. La plupart des applications s'attendent à ce que l'émulateur soit déjà configuré sur quelque chose de compatible, tel que xterm ou linux.

set -x
Un paramètre de débogage:
Vous vous référez à un script bruyant. Vous obtenez une sortie prolixe de votre script en raison des paramètres set -x qui sont utilisés pour le débogage. Une fois que vous avez vu ce qui se passe et que votre script a fonctionné comme vous le souhaitez, vous pouvez commenter la ligne set -x en plaçant le symbole # devant celle-ci.

set -e
Ce paramètre indique au script de quitter en cas d'erreur de commande. Par exemple, si votre commande consistait à modifier le répertoire dans un répertoire non existant ou à répertorier un fichier non existant, le script se terminerait par l'erreur plutôt que de passer à la ligne suivante.

Votre problème avec ssh via le serveur auquel vous vous connectez peut avoir pour résultat que, par défaut, le serveur tente de faire correspondre l'émulateur de terminal des paramètres de l'ordinateur à partir duquel vous vous connectez. S'il n'y a pas de correspondance, il ne sait pas quels paramètres vous pouvez gérer. Pour cela, vous devrez utiliser la commande export TERM pour indiquer au serveur comment communiquer avec vous.

4
L. D. James

Il est inutile de définir TERMsi aucun TTY n'est attribué. Si vous utilisez SSH, utilisez ssh -t:

 -t      Force pseudo-tty allocation.  This can be used to execute
         arbitrary screen-based programs on a remote machine, which can be
         very useful, e.g. when implementing menu services.  Multiple -t
         options force tty allocation, even if ssh has no local tty.

Notez ces erreurs:

debconf: (L’interface de dialogue ne fonctionnera pas sur un terminal muet, un tampon emacs Shell ou sans terminal de contrôle.) 
 ... 
 debconf: (Cette interface nécessite un contrôle.)
1
muru

Selon GNU manuel de gettext , la variable TERM "... contient un identifiant pour les possibilités de la fenêtre de texte". En d'autres termes, cela indique simplement au système le type de terminal que vous utilisez soi-disant et comment le texte à l'écran doit être adapté.

TERM=linux signifie que vous utiliserez supposément une console Linux, le résultat sera donc minimaliste et ne prendra peut-être pas en charge certaines langues.

Comme Muru l'a fait remarquer, vous devez vraiment avoir un pseudo tty attribué. Modifier la variable TERM peut aider, mais TERM=linux n’est pas ce que vous voulez. Vous n'utilisez pas la console Linux actuelle. L'option -t pour ssh serait une meilleure approche.

1