Ich habe kürzlich ein Upgrade (mit apt-get dist-upgrade
) meiner Kubuntu und Lubuntu Linux-Boxen durchgeführt. Jedes Mal, wenn ich mich bei einem dieser Computer anmelde, erhalte ich die folgende Meldung:
tput: No value for $TERM and no -T specified
Hier ist ein Screenshot der genauen Nachricht:
Dies geschah sowohl auf meinem Lubuntu-Rechner als auch auf meinem Kubuntu-Rechner, und es war kein Problem, bis ich ein Upgrade durchgeführt hatte. daher vermute ich, dass es kein benutzerfehler war.
Wie kann ich das beheben?
AKTUALISIEREN
Ich habe dies in meiner .bashrc-Datei nachverfolgt, die von meiner .profile-Datei aufgerufen wird. Die Tatsache, dass meine .bashrc-Datei jetzt ausgeführt wird, wenn ich mich über die Benutzeroberfläche anmelde, während dies vor dem Upgrade nicht der Fall war, ist etwas seltsam. Und nein, ich habe in letzter Zeit weder meine .bashrc-Datei noch mein .profile geändert. Außerdem ist bash nicht meine Standardshell.
Das Problem ist, dass ich tput
meine .bashrc-Datei aufrufe, um Variablen für das Hinzufügen von Farben zur Eingabeaufforderung einzurichten. Aber zu dem (unangemessenen) Zeitpunkt, an dem meine .bashrc-Datei jetzt ausgeführt wird, $TERM
ist nichts festgelegt.
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)
Aktualisierte Frage: Wie soll ich das beheben? Soll ich $TERM
mich setzen? Oder sollte ich diese Variablen einfach nicht setzen, wenn $TERM
nicht gesetzt?
UPDATE 2
Eine Lösung, die ich versuchte, war zu überprüfen, ob $TERM
eingestellt war. Aber das schien nicht zu funktionieren; Ich habe immer noch die gleiche Fehlermeldung. Hier ist der Code:
if [ ! "$TERM" = "" ]; then
#Do stuff here
fi
So offenbar $TERM
wurde eingestellt, aber tput
noch geschlossen war es nicht.
.profile
läuft unabhängig von der Standard-ShellAntworten:
Was letztendlich für mich funktionierte, war zu überprüfen, ob es sich bei der Shell um eine interaktive Shell handelte. Ich habe die Lösung auf diesen anderen Beitrag unter unix.stackexchange gestützt: So überprüfen Sie, ob eine Shell angemeldet / interaktiv / batch ist .
Der Code für die Lösung lautete also:
quelle
.bashrc
, finde ich es überraschend. Die Standardeinstellung.bashrc
enthält# If not running interactively, don't do anything
case $- in *i*) ;; *) return;;
:, daher sollten Ihre Einstellungen nur dann angewendet werden, wenn sie interaktiv sind..bashrc
?[[ $- == *i* ]] || return
Ref: ( askubuntu.com/a/1070182/362122 )Wenn du das tust
Es wird Ihr Problem beheben. Ohne die Option -s zeigt tty entweder Ihre tty an oder schreibt "not a tty"
quelle
tty
von seiner Hand-Seite ist „die Dateinamen der Standardeingabe verbunden des Terminals ausdrucken.“ Wenn es sich bei der Standardeingabe Ihres Skripts um eine Pipe handelt, schlägt dieser Test fehl. Dies hat zur Folge, dass Ihr Programm das Drucken von Farben in der Ausgabe stoppt, nur weil die Eingabe über eine Pipe erfolgt. Vielleichttest -t 1
(auf Englisch: "Ist stdout mit einem Terminal verbunden?") Möchten Sie das wirklich? Auf diese Weise erhalten Sie nur dann Farben , wenn die Ausgabe an ein Terminal gesendet wird, und es werden keine seltsamen Terminalcodes angezeigt, wenn Sie die Ausgabe in eine Datei umleiten oder sie beispielsweise weiterleitenless
.Für mich fügte hinzu
zu
/etc/profile
war das einzige , was das Problem gelöst. Eigentlich gab uns der Fehler einen Hinweis:No value for $TERM
quelle
[ Anderes Szenario, aber Suchmaschine führen mich hier zuerst]
Wenn der Fehler " tput: Kein Wert für $ TERM und kein -T angegeben " in einem Docker- Container auftritt (für mich bestand die einzige Möglichkeit, dies zu beheben, darin, die Variable festzulegen , wenn eine zsh- Shell aufgerufen wurde
docker exec -it <container> zsh
(-i für interaktiv)) wieENV TERM xterm-256color
in der Dockerfile für dieses Bild.Ansätze mögen
RUN export TERM=xterm-256color
oderRUN echo "export TERM=xterm-256color" >> ~/.zshrc
waren nicht erfolgreich. Andere Werte für TERM sind ebenfalls möglich.quelle
Versuchen Sie, das Terminal zu öffnen (egal welches, sogar tty1) und führen Sie diese Zeile aus
sudo update-alternatives --config x-terminal-emulator
Sie erhalten die Auswahl des Standard-Terminalemulators für x window. Wählen Sie eine aus, indem Sie die Nummer auswählen, und starten Sie den Computer neu, wenn Sie fertig sind.
$ sudo update-alternatives --config x-terminal-emulator
Es gibt 6 Möglichkeiten für den alternativen x-terminal-emulator (mit / usr / bin / x-terminal-emulator).
quelle
gnome-terminal
odersakura
sakura
. Dies scheint jedoch ein Problem mit dem GNOME-Terminal-Wrapper zu sein. Wenn ja, warum das nicht beheben?Der Fehlerdialog ist auf die Behebung des Fehlers # 678421 zurückzuführen , daher ist es meine Schuld. ;) Es informiert Sie über Fehler aufgrund einiger Befehle in einer Ihrer Konfigurationsdateien. Wenn Sie nach oben scrollen, können Sie sehen, welche Datei die Fehlermeldungen verursacht.
Möglicherweise reicht Sergs Antwort aus, um den Warndialog loszuwerden.
Bearbeiten:
Möchte aufgrund der aktualisierten Frage ein paar Dinge hinzufügen.
Im Gegensatz zu früher
/usr/sbin/lightdm-session
wird jetzt unter bash (bisher sh) gefahren. Das ist der Grund, warum die Beschaffung von~/.profile
Ergebnissen in der~/.profile
Beschaffung erfolgt~/.bashrc
. Möglicherweise bedeutet dies, dass der Standardinhalt von~/.profile
geändert werden sollte.Wie Sie vorgeschlagen haben, können Sie dies am einfachsten beheben, indem Sie tput nur aufrufen, wenn $ TERM festgelegt ist.
quelle