Die Linux Mint .profile-TERM-Variable wurde nicht festgelegt

390
Mark Deven

Ich habe ein benutzerdefiniertes Skript in meiner .profile-Datei, mit hinzugefügtem Code und nichts weggenommen, es wird jedoch immer noch mit einem TERM ENVIRONMENT VARIABLE NOT SETFehler geantwortet . Wenn ich den Befehl jedoch echo $TERMnach dem Start im Terminal ausführe, wird er auf gesetzt xterm-256color. Ich kann den Fehler sogar unterdrücken, anstatt ihn zu lösen, da er meinen Computer nach dem Start nicht beeinflusst.

Hier ist das Skript in .profile:

clear # ~/.profile: executed by the command interpreter for login shells. # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login # exists. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package.  # the default umask is set in /etc/profile; for setting the umask # for ssh logins, install and configure the libpam-umask package. #umask 022  # if running bash if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi  # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi  # set PATH so it includes user's private bin if it exists if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi   # --- EVERYTHING ABOVE HERE IS DEFAULT AND NOT CHANGED ---   wget -q --spider http://google.com if [ $? -eq 0 ]; then ( echo ) else ( echo Aquiring Internet Connection . . . sleep 6) fi wget -q --spider http://google.com if [ $? -eq 0 ]; then ( echo ) else ( sleep 5) fi  wget -q --spider http://google.com if [ $? -eq 0 ]; then echo ========================================================================================================================================== echo WELCOME LUKAKA LOCAL WEATHER REPORT VIA WTTR.IN Running XFCE echo ========================================================================================================================================== curl wttr.in echo ========================================================================================================================================== echo echo -e "\033[1;32mStatus for play.wildcraftmc.com [Wildcraft Survival+ Server] \033[0m"  mcstatus play.wildcraftmc.com status >wildcraft.txt sed -n 1p wildcraft.txt tail -n -1 wildcraft.txt echo ========================================================================================================================================== echo -e "\033[1;32mStatus For Mc.Starlegacy.Net [Starlegacy Space Survival] \033[0m"  mcstatus mc.starlegacy.net status >Star-Legacy.txt sed -n 1p Star-Legacy.txt tail -n -1 Star-Legacy.txt echo ========================================================================================================================================== echo -e "\033[1;32mStatus For Jectile.com [Shoota COD Server] \033[0m"  mcstatus Jectile.com status >Star-Legacy.txt sed -n 1p Star-Legacy.txt tail -n -1 Star-Legacy.txt echo ========================================================================================================================================== rm Star-Legacy.txt rm wildcraft.txt else echo Connection Failed. fi  echo -n "Would you like to start the GUI (y/n)? " old_stty_cfg=$(stty -g) stty raw -echo ; answer=$(head -c 1) ; stty $old_stty_cfg # Careful playing with stty if echo "$answer" | grep -iq "^y" ;then sudo systemctl start lightdm onedrive-d start xinput set-prop 11 317 -1 else echo No echo -e "\033[0;33mskipping GUI. The following service(s) will not run: onedrive-d, lightdm, Minecraft-Lukaka, xinput 11.\033[0m" fi 

Dies ist die Fehlermeldung: Irr\

Im Kontext prüft mein Skript, ob eine Internetverbindung vorhanden ist. Wenn dies der Fall ist, wird wttr.in (Wetter) verwendet und ein offizielles Minecraft-Tool zum Überprüfen des Status auf einigen Servern verwendet.

0

2 Antworten auf die Frage

1
djsmiley2k

Sobald Ihr Skript an den Punkt gelangt, an dem es Sie fragt, ob Sie die GUI starten möchten, führt es drei weitere Befehle aus, wenn Sie Ja sagen:

sudo systemctl start lightdm

onedrive-d start

xinput set-prop 11 317 -1

Wenn Sie nun wissen, dass die Fehler harmlos sind, können Sie sie 2>/dev/nullnach dem Befehl, der den Fehler verursacht, wie beispielsweise

sudo systemctl start lightdm 2>/dev/null

Es ist jedoch empfehlenswert, jeden dieser Befehle nacheinander auszuführen, die angezeigten Fehler zu überprüfen und wenn möglich zu beheben.

Ich habe die Fehlermeldung hinzugefügt, wenn das hilft. Ich erhalte auch keine Fehler, wenn ich es im Terminal laufe. Mark Deven vor 5 Jahren 0
Dieses Skript ist furchtbar hackig und macht alle möglichen "schlechten" Dinge. Ich weiß nicht mal, wohin ich gehen soll. djsmiley2k vor 5 Jahren 0
Wieso das? Ich habe versucht, den besten Weg zu finden, um all diese Dinge zu tun, aber ich bin kein Experte. Ich bin an Windows Batch gewöhnt. Mark Deven vor 5 Jahren 0
1
muru

Sie sollten prüfen, ob Sie in einem Terminal ausgeführt werden, bevor Sie Nachrichten drucken oder Befehle ausführen, für die ein Terminal erforderlich ist. Dies kann zum Beispiel mit folgendem geschehen:

if [ -t 1 ] # check if stdout is a terminal then # in a TTY, do stuff fi 

Die GUI-Anmeldeprozessquellen /etc/profileund ~/.profiledamit alle Umgebungsvariablen, die Sie benötigen, werden festgelegt. Diese Beschaffung wird jedoch nicht in einem Terminal durchgeführt, also TERMnicht festgelegt. Wenn Sie ein Terminal öffnen und ausführen echo $TERM, hat das Terminal TERMdie von ihm gestarteten Prozesse festgelegt, sodass Sie einen Wert erhalten.

IMO sollten Sie alles, was Sie in der ifoben angegebenen Überprüfung hinzugefügt haben, einpacken, da dies für die Ausführung in einer GUI nicht relevant ist.

Sehr schlau, daran hatte ich nicht gedacht, danke! Wird es trotzdem funktionieren, obwohl es andere if / fi-Checks in meinem Skript gibt? Mark Deven vor 5 Jahren 0
@MarkDodsons können Sie If-Blöcke in einem anderen If-Block verschachteln muru vor 5 Jahren 1