Problem :
I have a custom script in my .profile file, with added code and nothing taken away, however it is still replying with a TERM ENVIRONMENT VARIABLE NOT SET
error. However, if I run the command echo $TERM
in the terminal after boot it is set to xterm-256color
. I’m open to even suppressing the error instead of solving it since it does not effect my computer after the boot.
Here is the script 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 " 33[1;32mStatus for play.wildcraftmc.com [Wildcraft Survival+ Server] 33[0m"
mcstatus play.wildcraftmc.com status >wildcraft.txt
sed -n 1p wildcraft.txt
tail -n -1 wildcraft.txt
echo ==========================================================================================================================================
echo -e " 33[1;32mStatus For Mc.Starlegacy.Net [Starlegacy Space Survival] 33[0m"
mcstatus mc.starlegacy.net status >Star-Legacy.txt
sed -n 1p Star-Legacy.txt
tail -n -1 Star-Legacy.txt
echo ==========================================================================================================================================
echo -e " 33[1;32mStatus For Jectile.com [Shoota COD Server] 33[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 " 33[0;33mskipping GUI. The following service(s) will not run: onedrive-d, lightdm, Minecraft-Lukaka, xinput 11. 33[0m"
fi
For context, what my script does is check for an internet connection, if it is there it wgets wttr.in (weather) and uses an official Minecraft tool to check the status on some servers.
Solution :
So once your script gets to the point where it asks you if you want to start the GUI, if you say yes it runs 3 more commands:
sudo systemctl start lightdm
onedrive-d start
xinput set-prop 11 317 -1
Now, if you know the errors are harmless, you can redirect them into nothingless using 2>/dev/null
after the command causing the error, such as
sudo systemctl start lightdm 2>/dev/null
However, it’d be more advisable to run each of these commands in turn, review the errors that show and fix them if possible.
You should check whether you’re running in a terminal before printing messages or running commands that require a terminal. This can be done, for example, using:
if [ -t 1 ] # check if stdout is a terminal
then
# in a TTY, do stuff
fi
THe GUI login process sources /etc/profile
and ~/.profile
so that any environment variables you may need are set. But this sourcing isn’t done in a terminal, so TERM
isn’t set. When you open a terminal, and run echo $TERM
, the terminal has set TERM
for processes started by it, so you get a value.
IMO you should wrap all of whatever you added in the if
check given above, since none of it is particular relevant when running in a GUI.