У меня есть пользовательский скрипт в моем файле .profile с добавленным кодом и ничем не удаленным, однако он все еще отвечает с ошибкой TERM ENVIRONMENT VARIABLE NOT SET
. Однако если я запускаю команду echo $TERM
в терминале после загрузки, она устанавливается на xterm-256color
. Я открыт даже для подавления ошибки вместо ее решения, поскольку она не влияет на мой компьютер после загрузки.
Вот скрипт в .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
Для контекста, мой скрипт проверяет наличие интернет-соединения, и если оно есть, он получает wttr.in (погода) и использует официальный инструмент Minecraft для проверки статуса на некоторых серверах.
решение1
Итак, как только ваш скрипт дойдет до точки, где он спросит вас, хотите ли вы запустить графический интерфейс, если вы ответите «да», он выполнит еще 3 команды:
sudo systemctl start lightdm
onedrive-d start
xinput set-prop 11 317 -1
Теперь, если вы знаете, что ошибки безвредны, вы можете перенаправить их в nothingless, используя 2>/dev/null
после команды, вызывающей ошибку, например:
sudo systemctl start lightdm 2>/dev/null
Однако было бы более целесообразно выполнить каждую из этих команд по очереди, просмотреть отображаемые ошибки и исправить их, если это возможно.
решение2
Вам следует проверить, работаете ли вы в терминале, прежде чем печатать сообщения или запускать команды, требующие терминал. Это можно сделать, например, с помощью:
if [ -t 1 ] # check if stdout is a terminal
then
# in a TTY, do stuff
fi
Источники процесса входа в GUI /etc/profile
и, ~/.profile
таким образом, любые переменные окружения, которые вам могут понадобиться, установлены. Но этот источник не выполняется в терминале, поэтому TERM
не установлен. Когда вы открываете терминал и запускаете echo $TERM
, терминал устанавливает TERM
для запущенных им процессов, поэтому вы получаете значение.
На мой взгляд, вам следует обернуть все, что вы добавили, в if
проверку, приведенную выше, поскольку ничего из этого не имеет особого значения при запуске в графическом интерфейсе.