Recientemente actualicé (con apt-get dist-upgrade
) mis cajas de Linux Kubuntu y Lubuntu, y ahora cada vez que inicio sesión en una de estas máquinas, recibo este mensaje:
tput: No value for $TERM and no -T specified
Aquí hay una captura de pantalla del mensaje exacto:
Esto sucedió tanto en mi máquina Lubuntu como en la máquina Kubuntu, y no fue un problema hasta después de la actualización; así que sospecho que no fue un error del usuario.
¿Cómo puedo arreglar esto?
ACTUALIZAR
He rastreado esto hasta mi archivo .bashrc, que está siendo llamado por mi archivo .profile. Sin embargo, el hecho de que mi archivo .bashrc ahora se ejecuta cuando hago un inicio de sesión GUI, mientras que no lo hacía antes de actualizar es un poco extraño. Y no, no he modificado mi archivo .bashrc o mi .profile recientemente. Además, bash no es mi shell predeterminado.
El problema es que estoy llamando tput
a mi archivo .bashrc para configurar variables para agregar color al indicador. Pero en el momento (inapropiado) cuando mi archivo .bashrc ahora se ejecuta, $TERM
no está configurado.
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)
Pregunta actualizada: ¿Cómo debo solucionar esto? ¿Debo establecerme $TERM
? ¿O simplemente no debería establecer estas variables si $TERM
no está configurado?
ACTUALIZACIÓN 2
Una solución que intenté fue verificar si $TERM
estaba configurado. Pero esto no parecía funcionar; Todavía recibí el mismo mensaje de error. Aquí está el código:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
Así que aparentemente $TERM
estaba listo, pero tput
aún así concluyó que no.
.profile
ejecuta independientemente del shell predeterminadoRespuestas:
Lo que finalmente funcionó para mí fue verificar si el shell era un shell interactivo. Basé la solución en esta otra publicación en unix.stackexchange: Cómo verificar si un shell es login / interactive / batch .
Entonces el código para la solución fue:
fuente
.bashrc
, me parece sorprendente. El valor predeterminado.bashrc
contiene:# If not running interactively, don't do anything
case $- in *i*) ;; *) return;;
por lo que su configuración no debe aplicarse a menos que sea interactiva..bashrc
?[[ $- == *i* ]] || return
Ref: ( askubuntu.com/a/1070182/362122 )Si haces esto
Arreglará tu problema. Sin la opción -s, tty mostrará su tty o escribirá "not a tty"
fuente
tty
su página de manual es "imprimir el nombre del archivo del terminal conectado a la entrada estándar". Si el stdin de su script es una tubería, esta prueba fallará, con la consecuencia de que su programa deja de imprimir colores en su salida solo porque su entrada proviene de una tubería. Quizástest -t 1
(en inglés: "¿stdout está conectado a un terminal?") Es lo que realmente quieres? De esta manera se obtiene colores solamente si la salida va a un terminal, y no verá los códigos de terminal extraños si redirige su salida a un archivo o canalizarla a través de, por ejemplo,less
.Para mi, agregando
que
/etc/profile
era la única cosa que solucionó el problema. En realidad, el error nos dio una pista:No value for $TERM
fuente
[ Escenario diferente, pero el motor de búsqueda me condujo aquí primero]
Cuando se produce el error " tput: Sin valor para $ TERM y sin especificación -T " en un contenedor Docker (para mí, al abrir un intérprete de comandos zsh
docker exec -it <container> zsh
(-i para interactivo)), la única forma de solucionar esto era establecer la variable comoENV TERM xterm-256color
en el Dockerfile para esta imagen.Enfoques como
RUN export TERM=xterm-256color
oRUN echo "export TERM=xterm-256color" >> ~/.zshrc
no tuvieron éxito. Otros valores para TERM también son posibles.fuente
Intente abrir la terminal (no importa qué, incluso tty1 lo hará) y ejecute esta línea
sudo update-alternatives --config x-terminal-emulator
Se le presentará la opción del emulador de terminal predeterminado para la ventana x. Elija uno seleccionando el número y reinicie después de que haya terminado.
$ sudo update-alternative --config x-terminal-emulator
Hay 6 opciones para la alternativa x-terminal-emulator (que proporciona / usr / bin / x-terminal-emulator).
fuente
gnome-terminal
osakura
sakura
. Sin embargo, esto parece ser un problema con el contenedor de terminal gnome; Si es así, ¿por qué no arreglar eso?El diálogo de error se debe a la corrección del error # 678421 , por lo que es mi culpa. ;) Le informa acerca de los errores debidos a algunos comandos en uno de sus archivos de configuración. Si se desplaza hacia la parte superior, puede ver qué archivo está causando los mensajes de error.
Posiblemente la respuesta de Serg sea suficiente para deshacerse del diálogo de advertencia.
Editar:
Me gustaría agregar un par de cosas debido a la pregunta actualizada.
A diferencia de antes,
/usr/sbin/lightdm-session
ahora se ejecuta bajo bash (anteriormente sh). Es por eso que su abastecimiento de~/.profile
resultados en~/.profile
abastecimiento~/.bashrc
. Posiblemente esto significa que los contenidos predeterminados de~/.profile
deberían modificarse.Lo más fácil que puede hacer para solucionarlo es, como sugirió, llamar solo a tput si se establece $ TERM.
fuente