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 tputa mi archivo .bashrc para configurar variables para agregar color al indicador. Pero en el momento (inapropiado) cuando mi archivo .bashrc ahora se ejecuta, $TERMno 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 $TERMno está configurado?
ACTUALIZACIÓN 2
Una solución que intenté fue verificar si $TERMestaba 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 tputaún así concluyó que no.

.profileejecuta 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.bashrccontiene:# If not running interactively, don't do anythingcase $- in *i*) ;; *) return;;por lo que su configuración no debe aplicarse a menos que sea interactiva..bashrc?[[ $- == *i* ]] || returnRef: ( 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
ttysu 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/profileera la única cosa que solucionó el problema. En realidad, el error nos dio una pista:No value for $TERMfuente
[ 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-256coloren el Dockerfile para esta imagen.Enfoques como
RUN export TERM=xterm-256coloroRUN echo "export TERM=xterm-256color" >> ~/.zshrcno 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-emulatorSe 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-terminalosakurasakura. 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-sessionahora se ejecuta bajo bash (anteriormente sh). Es por eso que su abastecimiento de~/.profileresultados en~/.profileabastecimiento~/.bashrc. Posiblemente esto significa que los contenidos predeterminados de~/.profiledeberían modificarse.Lo más fácil que puede hacer para solucionarlo es, como sugirió, llamar solo a tput si se establece $ TERM.
fuente