Переменная TERM для Linux Mint .profile не установлена

314
Mark Deven

У меня есть собственный скрипт в моем файле .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 

Это сообщение об ошибке: err\

Для контекста, мой скрипт проверяет подключение к интернету, если он есть, он использует wttr.in (погода) и использует официальный инструмент Minecraft для проверки статуса на некоторых серверах.

0

2 ответа на вопрос

1
djsmiley2k

Поэтому, как только ваш сценарий доходит до того, что он спрашивает вас, хотите ли вы запустить графический интерфейс, если вы говорите «да», он запускает еще 3 команды:

sudo systemctl start lightdm

onedrive-d start

xinput set-prop 11 317 -1

Теперь, если вы знаете, что ошибки безвредны, вы можете перенаправить их в безвыходное состояние, используя 2>/dev/nullкоманду, вызывающую ошибку, такую ​​как

sudo systemctl start lightdm 2>/dev/null

Тем не менее, было бы более целесообразно выполнять каждую из этих команд по очереди, просматривать отображаемые ошибки и исправлять их, если это возможно.

Я добавил сообщение об ошибке, если это поможет. Я также не получаю никаких ошибок при запуске его в терминале. Mark Deven 5 лет назад 0
Этот сценарий ужасно хакерский и делает все виды «плохих» вещей. Я даже не знаю, куда идти отсюда. djsmiley2k 5 лет назад 0
Как так? Я пытался найти лучший способ сделать все это, но я не эксперт-разбойник. Я привык к Windows Batch. Mark Deven 5 лет назад 0
1
muru

Вы должны проверить, работаете ли вы в терминале, прежде чем печатать сообщения или выполнять команды, требующие терминала. Это можно сделать, например, используя:

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

Источники процесса входа в систему с графическим интерфейсом /etc/profileи, ~/.profileтаким образом, любые переменные среды, которые могут вам понадобиться, установлены. Но этот источник не выполняется в терминале, поэтому TERMне устанавливается. Когда вы открываете терминал и запускаете его echo $TERM, он настроен TERMдля запускаемых им процессов, поэтому вы получаете значение.

IMO, вам следует обернуть все, что вы добавили в ifприведенную выше проверку, поскольку ни один из них не имеет особого значения при работе в графическом интерфейсе.

Очень умно, я не думал об этом, спасибо! Будет ли он работать, даже если в моем скрипте есть другие проверки if / fi? Mark Deven 5 лет назад 0
@MarkDodsons вы можете вкладывать блоки `if` в другой блок` if` muru 5 лет назад 1

Похожие вопросы