Linux Mint .profile TERM 변수가 설정되지 않았습니다.

Linux Mint .profile TERM 변수가 설정되지 않았습니다.

내 .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

오류 메시지는 다음과 같습니다.실수\

상황에 맞게 내 스크립트는 인터넷 연결을 확인하고, 인터넷 연결이 있으면 wgetr.in(날씨)을 가져오고 공식 Minecraft 도구를 사용하여 일부 서버의 상태를 확인합니다.

답변1

따라서 스크립트가 GUI를 시작할 것인지 묻는 지점에 도달하면, 예라고 대답하면 3개의 명령이 더 실행됩니다.

sudo systemctl start lightdm

onedrive-d start

xinput set-prop 11 317 -1

이제 오류가 무해하다는 것을 알고 있다면 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

IMO에서는 위에 제공된 검사에 추가한 모든 항목을 래핑해야 합니다 if. GUI에서 실행할 때 특별히 관련된 항목은 없기 때문입니다.

관련 정보