Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash의 환경 변수는 무엇입니까?

컴퓨팅에서 변수 변할 수 있는 가치를 나타내는 단어입니다. 변수로 생각하지 않더라도 일상적인 언어로 매일 변수를 사용합니다. "내 차"라고 말하면 "내 차"를 그 당시에 소유하게 된 차를 나타내는 일종의 변수로 사용하는 것입니다. 제조사와 모델은 삶의 과정에서 오래된 차를 새 것으로 교체함에 따라 반드시 변경되지만 "내 차"라는 변수를 생성하면 현재 어떤 종류의 차에 대해 헤매지 않아도 됩니다. 당신이 당신의 차량을 참조하고 싶을 때마다 소유하십시오.

컴퓨터에서 변수는 비슷한 방식으로 사용됩니다.

예를 들어, 컴퓨터에 사용자 계정이 있는 사람은 컴퓨터가 개인 데이터를 보관하는 홈 디렉토리가 있습니다. 그러나 각 사용자는 고유한 홈 디렉토리(/home/seth Seth의 경우, /home/tux Tux의 경우 등), 따라서 일반적으로 홈 디렉토리를 참조하려면 $HOME 변수를 사용할 수 있습니다. 현재의 홈 디렉토리를 나타내기 위해 사용자, 사용자의 로그인 이름에 관계없이.

환경 변수는 특수 변수입니다(예:$HOME ) 로그인 세션에 대한 정보를 포함합니다. 명령을 실행할 때 사용할 시스템 셸용으로 저장됩니다. Linux, Mac 또는 Windows를 사용하든 관계없이 존재합니다. 이러한 변수의 대부분은 설치 또는 사용자 생성 중에 기본적으로 설정됩니다.

환경 변수는 모든 최신 시스템에 적용되지만 이 기사에서는 Linux, BSD, Mac 및 Cygwin에서 Bash 셸의 환경 변수를 구체적으로 다룹니다.

환경 변수 이해

환경 변수는 기술적으로 변수와 다르지 않습니다. 변수에 사용된 것과 정확히 동일한 구문으로 설정, 호출 및 지울 수 있습니다. Bash에서 변수를 사용하는 데 익숙하지 않다면 계속하기 전에 Bash에서 내 변수를 읽어보세요.

환경 변수를 직접 사용하지 않는 경우가 많습니다. 필요에 따라 개별 애플리케이션과 데몬에서 참조합니다. 예를 들어 홈 디렉토리는 로그인할 때 환경 변수로 설정됩니다. 예를 들어 Linux에서는 HOME 다음과 같은 환경 변수의 내용:

$ echo $HOME
HOME=/home/seth

Mac:

$ echo $HOME
HOME=/Users/bogus

Windows:

C:\Users\bogus

env를 사용하여 시스템에 설정된 모든 환경 변수를 볼 수 있습니다. 명령. 목록이 길기 때문에 더보기를 통해 출력을 파이프하세요. 더 쉽게 읽을 수 있도록:

$ env | more
TERM=xterm-256color
LESSOPEN=||/usr/bin/lesspipe.sh %s
USER=seth
SUDO_EDITOR=emacs
WWW_HOME=https://mirror.lagoon.nc/pub/slackware/slackware64-current/ChangeLog.txt
VISUAL=emacs
DISPLAY=:0
PS1=$
XDG_DATA_DIRS=/home/seth/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin
GDMSESSION=gnome
MAIL=/var/spool/mail/seth
[...]

환경 변수는 기본 설정을 무시하거나 시스템이 자체적으로 만들 이유가 없는 새 설정을 관리해야 할 때 유용할 수 있습니다. 예를 들어, 명령을 입력할 때 컴퓨터가 찾는 방법을 알고 있는 유일한 이유는 해당 명령에 해당하는 애플리케이션은 PATH 환경 변수는 볼 위치를 알려줍니다. 이 변수는 명령이 ls인지 여부에 관계없이 운영 체제에서 명령을 검색할 수 있는 유효한 디렉터리를 나열합니다. 또는 cp, Firefox 또는 Lutris와 같은 그래픽 응용 프로그램 또는 기타 모든 것.

다른 환경 변수는 다른 시스템에서 사용됩니다. 내 PATH 변수는 예를 들어 터미널 에뮬레이터에 필수적이지만 Java(중요한 Java 라이브러리를 가리키는 고유한 경로가 있음)의 경우에는 훨씬 덜 중요합니다. 그러나 USER 변수는 서비스를 요청하는 사람을 식별하는 방법으로 여러 시스템에서 사용됩니다. 예를 들어 다중 사용자 시스템에 있고 로컬 사서함을 확인해야 하는 경우 mail 명령은 MAIL을 기반으로 검색할 메일 스풀을 알고 있습니다. 및 사용자 변수.

환경 변수 설정

일반적으로 설치 프로그램은 dnf Fedora에서 apt Ubuntu에서 brew Mac에서 또는 사용자 정의 설치 프로그램은 새 응용 프로그램에 대한 환경 변수를 업데이트합니다. 그러나 배포판의 의도된 도구 집합 외부에 무언가를 설치할 때 환경 변수를 직접 관리해야 할 수도 있습니다. 또는 기본 설정에 맞게 환경 변수를 추가하도록 선택할 수 있습니다. 일부 애플리케이션을 보관함에 보관하려는 경우 폴더가 홈 디렉토리에 있는 경우 해당 디렉토리를 PATH에 추가해야 합니다. 따라서 운영 체제는 명령을 실행할 때 실행할 응용 프로그램을 찾을 수 있습니다.

임시 환경 변수

폐기 변수를 생성하는 방식으로 경로에 위치를 추가할 수 있습니다. 작동하지만 시스템 경로를 수정하는 데 사용한 셸이 열려 있는 동안에만 가능합니다. 예를 들어 Bash 셸을 열고 시스템 경로를 수정합니다.

$ export PATH=$PATH:/home/seth/bin

결과 확인:

$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin:/home/seth/bin

세션 닫기:

$ exit

새 항목을 열고 PATH를 살펴보세요. 변수:

$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin

이 변수는 PATH 때문에 기본 상태로 되돌아갔습니다. 각각의 새로운 쉘로 설정되지 않습니다. 이를 위해서는 쉘이 실행될 때마다 로드되도록 변수를 구성해야 합니다.

영구 환경 변수

셸 구성 파일에서 고유한 영구 환경 변수를 설정할 수 있으며 그 중 가장 일반적인 것은 ~/.bashrc입니다. . 여러 사용자를 관리하는 시스템 관리자인 경우 /etc/profile.d에 있는 스크립트에서 환경 변수를 설정할 수도 있습니다. 디렉토리.

구성 파일로 변수를 설정하는 구문은 쉘에서 변수를 설정하는 것과 동일합니다.

export PATH=$PATH:/snap/bin:/home/seth/bin

현재 셸을 닫거나 업데이트된 구성을 강제로 로드합니다.

$ . ~/.bashrc

마지막으로 시스템 경로를 다시 한 번 살펴보세요.

$ echo $PATH
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/snap/bin:/home/seth/bin:/home/seth/.local/bin:/snap/bin:/home/seth/bin

이제 추가 사용자 지정 디렉터리를 포함하도록 올바르게 설정되었습니다.

다른 환경 변수 탐색

환경 변수를 마음대로 만들고 조작할 수 있으며 일부 응용 프로그램은 그렇게 합니다. 이 사실은 많은 환경 변수가 대부분의 응용 프로그램에서 사용되지 않으며 자신의 임의 변수를 추가하면 일부는 전혀 사용되지 않을 수 있음을 의미합니다. 따라서 질문은 다음과 같습니다. 어떤 환경 변수가 의미가 있는지 어떻게 알 수 있습니까?

답은 애플리케이션 문서에 있습니다. 예를 들어, 일반 Bash 환경에서 사용할 수 있는 옵션을 알아보려면 Bash 설명서를 참조하세요. Bash 매뉴얼 페이지에는 많은 중요한 변수가 언급되어 있지만 Bash용 GNU 정보 페이지에는 유용한 Bourne Shell 및 Bash 환경 변수에 대한 두 가지 완전한 목록과 각각이 사용되는 방법이 있습니다.

예를 들어 정보 페이지 목록에서:

'HISTCONTROL'
     A colon-separated list of values controlling how commands are saved
     on the history list.  If the list of values includes 'ignorespace',
     lines which begin with a space character are not saved in the
     history list.  A value of 'ignoredups' causes lines which match the
     previous history entry to not be saved.  A value of 'ignoreboth' is
     shorthand for 'ignorespace' and 'ignoredups'.
     [...]

이 출력은 HISTCONTROL 환경 변수는 Bash 기록이 표시되는 방식과 해당 경험을 사용자 지정하는 데 사용할 수 있는 값을 제어합니다. 이 예에서 무시 값은 기록의 출력을 알려줍니다. 중복 행을 무시하는 명령입니다.

이것을 쉽게 테스트할 수 있습니다. 먼저 동일한 명령을 연속으로 두 번 실행합니다.

$ echo "hello world"
hello world
$ echo "hello world"
hello world

기록 또는 가장 최근 항목 보기:

$ history | tail -5
 996  man bash
 997  info bash
 998  echo "hello world"
 999  echo "hello world"
 1000 history

이제 중복 항목이 실제로 나열되는 것을 볼 수 있습니다.

.bashrc에서 새 환경 변수를 설정합니다. 정보 페이지에서 읽은 내용을 기반으로 한 파일:

export HISTCONTROL=$HISTCONTROL:ignorespace:ignoredups

새 구성을 저장하고 로드합니다.

$ source ~/.bashrc

두 개의 명령을 연속으로 두 번 실행:

$ echo "hello once"
hello once
$ echo "hello once"
hello once

기록에서 가장 최근 항목 보기:

$ history | tail -5
 1000 history
 1001 emacs ~/.bashrc
 1002 source ~/.bashrc
 1003 echo "hello once"
 1004 history

지정된 정보 페이지와 마찬가지로 새 환경 변수로 인해 중복 항목이 이제 하나의 항목으로 축소됩니다.

관련 환경 변수를 찾는 것은 일반적으로 영향을 미치려는 애플리케이션에 대한 문서를 읽는 문제입니다. 대부분의 환경 변수는 한 응용 프로그램을 원활하게 실행하는 데 필요한 사항에 따라 다릅니다. 일반 항목의 경우 셸 문서가 논리적으로 볼 수 있는 위치입니다. 새로운 환경 변수가 필요한 스크립트나 애플리케이션을 작성하는 경우 해당 변수를 자신의 문서에 정의해야 합니다.