Ich habe ein benutzerdefiniertes Skript in meiner .profile-Datei, mit hinzugefügtem Code und ohne dass etwas weggenommen wurde, aber es antwortet trotzdem mit einem TERM ENVIRONMENT VARIABLE NOT SET
Fehler. Wenn ich den Befehl jedoch echo $TERM
nach dem Booten im Terminal ausführe, wird er auf gesetzt xterm-256color
. Ich bin sogar bereit, den Fehler zu unterdrücken, anstatt ihn zu beheben, da er meinen Computer nach dem Booten nicht beeinträchtigt.
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
Zum Kontext: Mein Skript prüft, ob eine Internetverbindung besteht. Wenn ja, ruft es wttr.in (Wetter) ab und verwendet ein offizielles Minecraft-Tool, um den Status auf einigen Servern zu prüfen.
Antwort1
Wenn Ihr Skript also an dem Punkt angelangt ist, an dem es Sie fragt, ob Sie die GUI starten möchten, und Sie mit „Ja“ antworten, werden drei weitere Befehle ausgeführt:
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 in Nothingless umleiten, indem Sie 2>/dev/null
nach dem Befehl, der den Fehler verursacht, Folgendes verwenden, z. B.
sudo systemctl start lightdm 2>/dev/null
Es ist jedoch ratsamer, jeden dieser Befehle nacheinander auszuführen, die angezeigten Fehler zu überprüfen und sie nach Möglichkeit zu beheben.
Antwort2
Bevor Sie Nachrichten drucken oder Befehle ausführen, die ein Terminal erfordern, sollten Sie prüfen, ob Sie in einem Terminal arbeiten. Dies kann beispielsweise mit folgendem Befehl erfolgen:
if [ -t 1 ] # check if stdout is a terminal
then
# in a TTY, do stuff
fi
Die GUI-Anmeldeprozessquellen /etc/profile
und ~/.profile
damit alle Umgebungsvariablen, die Sie möglicherweise benötigen, werden festgelegt. Diese Quellen werden jedoch nicht in einem Terminal verwendet und TERM
sind daher nicht festgelegt. Wenn Sie ein Terminal öffnen und ausführen echo $TERM
, hat das Terminal TERM
die von ihm gestarteten Prozesse festgelegt, sodass Sie einen Wert erhalten.
Meiner Meinung nach sollten Sie alles, was Sie hinzugefügt haben, in die if
oben angegebene Prüfung einschließen, da nichts davon bei der Ausführung in einer GUI besonders relevant ist.