11 votes

Que fait "export TERM=linux" à l'intérieur d'un script ?

Mon bash script fonctionne de manière très bruyante lorsqu'il est exécuté à l'intérieur d'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:

L'une des suggestions que j'ai vues affichées là-bas était d'exporter TERM=linux.

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

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

8voto

linuxmaniax Points 21

El export TERM=linux La commande définit l'émulateur de terminal à linux . Selon l'environnement et les capacités de la console que vous utilisez, certaines émulations fonctionneront mieux que d'autres.

La valeur par défaut TERME 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 l'émulateur de terminal le mieux recommandé pour son programme. La plupart des applications s'attendent à ce que l'émulateur soit déjà configuré sur quelque chose de compatible, par exemple xterm o linux .

set -x
Un paramètre de débogage :
Vous faites référence à un script bruyant. Vous obtenez une sortie verbeuse de votre script en raison de la set -x qui sont utilisés pour le débogage. Une fois que vous avez vu ce qui se passe et que votre script s'exécute comme vous le souhaitez, vous pouvez commenter le paramètre set -x en plaçant le # en face d'elle.

set -e
Ce paramètre indique au script de sortir en cas d'erreur de commande. Par exemple, si votre commande devait changer de répertoire vers un répertoire inexistant ou lister un fichier inexistant, le script se terminerait sur l'erreur, plutôt que de passer à la ligne suivante.

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

5voto

muru Points 180007

Il n'y a aucun intérêt à mettre TERM si un ATS n'est pas 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: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or **without a controlling terminal**.)
...
debconf: (This frontend **requires a controlling tty**.)

5voto

Sergiy Kolodyazhnyy Points 97292

Selon GNU manuel gettext la page TERM La variable "...contient un identifiant pour les capacités de la fenêtre de texte". En d'autres termes, elle indique au système le type de terminal que vous êtes censé utiliser et comment le texte à l'écran doit être adapté.

TERM=linux signifie que vous êtes censé utiliser la console Linux, donc la sortie sera minimaliste, et peut ne pas avoir de support pour certaines langues.

Comme muru l'a souligné, vous avez vraiment besoin d'avoir un pseudo tty alloué. Modifier TERM pourrait aider, mais TERM=linux n'est pas ce que vous voulez. Vous n'utilisez pas la console Linux actuelle. Le site -t pour ssh serait une meilleure approche.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X