Linux에서 Bash에서 환경 변수를 설정하는 방법

0
1111
랩톱에 녹색 텍스트 줄이있는 양식화 된 Linux 터미널.
fatmawati achmad zaenuri / Shutterstock

Linux에는 환경 변수 유형이 두 가지 이상 있습니다. 그것들을보고, 로컬 및 원격 로그인을 위해 생성하고, 재부팅 후에도 그것들을 유지하는 방법을 배우십시오.

환경 변수 작동 방식

터미널 창과 그 안에있는 쉘을 시작할 때 쉘이 올바르게 구성되도록 변수 모음이 참조됩니다. 이러한 변수는 또한 터미널 창과 셸에서 참조해야 할 정보가 있는지 확인합니다. 이러한 변수는 집합 적으로 터미널 창에서 찾은 환경을 정의하는 설정을 보유하며 명령 프롬프트의 모양과 같습니다. 따라서 자연스럽게 환경 변수라고합니다.

일부 환경 변수는 시스템 전체 또는 전역입니다. 다른 사람들은 세션 전체에 걸쳐서 만 볼 수 있습니다. 다른 사람들은 세션 환경 변수를 참조 할 수 없습니다. 쉘 내에 세 번째 환경 변수 세트가 정의되어 있습니다. 로케일, 시간대 및 키보드 설정, 쉘이 명령을 찾을 때 검색된 디렉토리 세트 및 기본 편집기는 모두 쉘 환경 변수에 저장됩니다.

시스템에 존재하는 환경 변수를 확인하는 방법을 보여 드리고 직접 환경 변수를 만드는 방법을 설명하겠습니다. 또한 하위 프로세스에서이를 사용 가능하게하고 재부팅시 지속적으로 유지하는 방법을 보여줍니다.

환경과 상속

쉘이 시작되면 초기화 단계를 거칩니다. 이 시점에서 쉘의 환경을 정의하는 환경 변수를 읽습니다.

자식 프로세스라고하는 해당 쉘에서 프로그램이나 명령이 시작되면 부모 프로세스의 환경을 상속 받지만 조심하십시오! 앞으로 살펴 보 겠지만, 환경에 추가되지 않는 변수를 만들어서 자식 프로세스에 상속되지는 않습니다.

자식 프로세스가 셸인 경우 해당 셸은 고유 한 새 변수 집합에서 초기화됩니다. 따라서 현재 셸에서 명령 프롬프트를 변경 한 다음 자식 셸을 시작하면 자식 셸은 부모의 수정 된 명령 프롬프트를 상속하지 않습니다.

글로벌 환경 변수

일반적으로 환경 변수에는 대문자 이름이 지정됩니다. 다음은 글로벌 환경 변수 중 일부와 그 변수가 나타내는 값입니다.

  • 껍질: 터미널 창을 열 때 실행될 셸 이름입니다. 대부분의 Linux 배포판에서는 기본 설정에서 변경하지 않는 한 bash입니다.
  • 기간: 터미널 창은 실제로 하드웨어 터미널의 에뮬레이션입니다. 에뮬레이션 할 하드웨어 터미널 유형이 있습니다.
  • 사용자: 시스템을 사용하는 현재 사람의 사용자 이름
  • PWD : 현재 작업 디렉토리의 경로입니다.
  • OLDPWD : 현재 작업 디렉토리로 이동하기 전에 있던 디렉토리.
  • LS_COLORS : 에 의해 사용되는 색상 코드 목록 ls 다른 파일 형식을 강조 표시하십시오.
  • 우편: 만약 mail시스템이 Linux 컴퓨터에 설정되어 있으며 (기본값은 아님) 현재 사용자의 사서함 경로가 유지됩니다.
  • 통로: 쉘이 명령 실행 파일을 찾기 위해 검색 할 디렉토리 목록.
  • LANG : 언어, 지역화 및 문자 인코딩 설정
  • 집: 현재 사용자의 홈 디렉토리
  • _ : 밑줄 (_) 환경 변수는 입력 된 마지막 명령을 보유합니다.

관련 : Linux에서 푸시 및 팝을 사용하는 방법

우리는 이것들 중 어떤 것이 더 정교하지 않은 것을 사용하도록 설정된 것을 볼 수 있습니다. echo터미널 창에 값을 씁니다. 보고 환경 변수에 의해 개최되는 경우 달러 기호 ($)를 이름의 시작 부분에 추가하십시오.

탭 완성을 사용하여 환경 변수 이름을 채울 수 있습니다. 이름의 몇 글자를 입력하고 Tab을 누르십시오. 변수 이름은 쉘에 의해 완성됩니다. 그렇지 않으면 환경 변수를 동일한 문자로 시작하는 이름을 가진 다른 명령과 구별하기 위해 문자를 몇 개 더 입력해야합니다.

echo $SHELL
echo $LANG
echo $HOME
echo $PWD

터미널 창에서 $ SHELL 에코

자신을 만들려면 글로벌 환경 변수를 추가하면 /etc/environment 파일. 당신이 사용해야합니다 sudo 이 파일을 편집하려면

sudo gedit /etc/environment

터미널 창에서 sudo gedit / etc / environment

환경 변수를 추가하려면 이름, 등호 (=) 및 환경 변수가 보유하려는 값입니다. 등호 앞뒤에 공백을 두지 마십시오 (=). 환경 변수의 이름은 문자, 밑줄 (_) 또는 숫자입니다. 그러나 이름의 첫 문자는 숫자 일 수 없습니다.

값에 공백이 있으면 전체 값을 따옴표로 묶어야합니다 (").

/ etc / environment 파일이 편집기에서 열리고 새 환경 변수가 추가됩니다.

파일을 저장 한 다음 로그 아웃했다가 다시 로그인하십시오. 사용하다 echo 새 변수가 존재하고 설정 한 값을 보유하는지 테스트합니다.

echo $WEBSITE

터미널 창에서 $ WEBSITE를 에코하십시오.

글로벌 환경 변수이므로 모든 사용자가 사용할 수 있기 때문에 mary 다음에 로그인 할 때 환경 변수를 참조 할 수 있습니다.

echo $WEBSITE

터미널 창에서 $ WEBSITE를 에코하십시오.

모든 환경 변수를 한 번에 보려면 다음을 입력하십시오. printenv. 출력이 많으므로 파이프를 통해 연결하는 것이 좋습니다 sort그런 다음 less:

printenv | sort | less

printenv | 정렬 | 터미널 창에서 더 적습니다.

환경 변수의 정렬 된 목록이 less.

터미널 창에서 적은 환경 변수 목록을 정렬합니다.

우리는 출력을 통해 파이프 grep 특정 주제와 관련된 환경 변수를 찾습니다.

printenv | grep GNOME

printenv | 터미널 창에서 그놈 그놈.

관련 : gedit를 사용하여 Linux에서 그래픽으로 텍스트 파일을 편집하는 방법

쉘 환경 변수

이들은 셸 환경 변수 중 일부입니다. bash 행동과 기능을 지시하거나 기록합니다. 터미널을 사용할 때 일부 값이 업데이트됩니다. 예를 들어 COLUMNS 환경 변수는 터미널 창의 너비에 대한 변경 사항을 반영하여 업데이트됩니다.

  • 쇼핑 : 때 사용 된 명령 줄 옵션 bash 발사되었다.
  • BASH_VERSION : 그만큼 bash 단어와 숫자의 문자열로 된 버전 번호.
  • BASH_VERSINFO : 그만큼 bash 숫자로 버전.
  • 열 : 터미널 창의 현재 너비입니다.
  • 먼지 : 디렉토리 스택에 추가 된 디렉토리 pushd 명령.
  • 히스토리 크기 : 에 허용되는 최대 줄 수 history 파일.
  • 역사 : 라인 수 history 메모리에 허용됩니다.
  • 호스트 이름 : 컴퓨터의 호스트 이름
  • IFS : 내부 필드 구분 기호는 명령 행에서 입력을 분리하는 데 사용되었습니다. 기본적으로 이것은 공백입니다.
  • PS1 : 그만큼 PS1 환경 변수는 기본, 기본 및 명령 프롬프트에 대한 정의를 보유합니다. 명령 프롬프트 정의에 이스케이프 시퀀스라는 토큰 세트가 포함될 수 있습니다. 호스트 및 사용자 이름, 현재 작업 디렉토리 및 시간과 같은 것을 나타냅니다.
  • PS2 : 명령이 둘 이상의 행에 걸쳐 있고 입력이 더 필요한 경우 보조 명령 프롬프트가 표시됩니다. 그만큼 PS2 환경 변수는이 보조 프롬프트의 정의를 보유하며 기본적으로이 기호보다 큼 (>).
  • 쉘 옵스 : 셸 옵션을 사용하여 설정할 수 있습니다 set 선택권.
  • UID : 현재 사용자의 사용자 식별자.

관련 : Linux에서 푸시 및 팝을 사용하는 방법

다음 셸 변수 중 몇 가지를 살펴 보겠습니다.

echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID

터미널 창에서 $ BASH_VERSION을 에코하십시오.

완전성을 기하기 위해 명령 프롬프트 정의에 사용할 수있는 토큰은 다음과 같습니다.

  • 티: HH : MM : SS 형식의 현재 시간입니다.
  • 디: 요일, 월, 날짜로 표현 된 현재 날짜입니다.
  • 엔: 개행 문자.
  • 에스: 껍질의 이름.
  • W : 현재 작업 디렉토리의 이름
  • w : 현재 작업 디렉토리의 경로입니다.
  • 유: 로그인 한 사람의 사용자 이름
  • h : 컴퓨터의 호스트 이름
  • # : 쉘 내의 각 명령에는 번호가 매겨져 있습니다. 이를 통해 명령 프롬프트에서 명령 번호를 볼 수 있습니다. 이것은 명령에서 사용할 번호와 동일하지 않습니다. history 명부.
  • $ : 프롬프트의 마지막 문자를 달러 기호 ($) 및 일반 사용자의 경우 해시 기호 (#)는 루트 사용자입니다. 이것은 사용자의 UID를 확인하여 작동합니다. 0이면 사용자는 루트입니다.

당신의 정의를 찾을 수 있습니다 PS1 귀하의 환경 변수 .bashrc 파일.

세션 환경 변수 작성

자신 만의 환경 변수를 만들려면 맨 아래에 추가하십시오. .bashrc 파일. SSH 연결과 같은 원격 세션에서 환경 변수를 사용할 수있게하려면 환경 변수를 추가해야합니다. .bash_profile 파일도.

환경 변수 정의의 형식은 두 파일 모두 동일합니다. 에 정의를 추가하려면 .bash_profile 파일을 보려면, 홈 디렉토리에 이것을 입력하십시오 :

gedit .bashrc

.bashrc 파일은 편집기에 저장되고 파일의 마지막 줄에 새로운 환경 변수가 추가되었습니다.

우리는라는 환경 변수를 추가했습니다 INHERITED_VAR. 줄의 시작 부분에 “export”라는 단어가 있습니다.

터미널 창에서 gedit .bashrc.

편집이 끝나면 파일을 저장하고 닫습니다. 로그 아웃했다가 다시 로그인하거나 셸에서 .bash_profile 도트 명령을 사용하여 파일 (.) 이렇게 :

. .bashrc

. 터미널 창에서 .bashrc.

이제 커맨드 라인에서 환경 변수를 만들어 봅시다 :

LOCAL_VAR="This session only"

터미널 창에서 LOCAL_VAL = "이 세션 만"

우리가 사용한다면 echo, 우리는 두 환경 변수 모두에 액세스 할 수 있음을 알 수 있습니다.

echo $LOCAL_VAR
echo $INHERITED_VAR

터미널 창에서 $ LOCAL_VAR을 반향하십시오.

당신은의 정의를 알 수 있습니다 INHERITED_VAR 환경 변수는 줄의 시작 부분에 “export”라는 단어가있었습니다. 이는 환경 변수가 현재 쉘의 하위 프로세스에 의해 상속됨을 의미합니다. 우리가 bash 하위 쉘 내부에서 두 개의 변수를 다시 확인할 수 있습니다.

bash
echo $LOCAL_VAR
echo $INHERITED_VAR

터미널 창에서 bash

보시다시피 INHERITED_VAR 자식 셸에서 액세스 할 수 있지만 LOCAL_VAR 아니다. 우리는 단순히 빈 줄을 얻습니다.

“내보내기”는 하위 프로세스가 상속하는 환경에 환경 변수 부분을 추가하지만, INHERITED_VAR 글로벌 환경 변수가 아닙니다. 예를 들어, user mary 그것을 참조 할 수 없습니다 :

echo $INHERITED_VAR

터미널 창에서 $ INHERITED_VAR을 반향하십시오.

우리 아이를 닫으려면 bash 세션, 우리는 사용 exit:

exit

상속 된 환경도 스크립트에 영향을줍니다. 다음은 세 가지 환경 변수의 값을 터미널 창에 쓰는 간단한 스크립트입니다.

#!/bin/bash

echo "WEBSITE" $WEBSITE
echo "LOCAL_VAR" $LOCAL_VAR
echo "INHERITED_VAR" $INHERITED_VAR

이것은라는 파일에 저장되었습니다 envtest.sh그런 다음 다음을 사용하여 실행 가능하게 만들었습니다.

chmod +x envtest.sh

스크립트를 실행하면 세 가지 환경 변수 중 두 가지에 액세스 할 수 있습니다.

./envtest.sh

터미널 창에서 ./envtest.sh

스크립트는 WEBSITE 지구 환경 변수와 INHERITED_VAR 내 보낸 환경 변수. 액세스 할 수 없습니다 LOCAL_VAR스크립트가 변수가 작성된 동일한 쉘에서 실행 되더라도.

필요한 경우 명령 행에서 환경 변수를 내보낼 수 있습니다. 우리는 우리에게 LOCAL_VAR스크립트를 다시 실행하십시오.

export LOCAL_VAR
./envtest.sh

터미널 창에서 LOCAL_VAR을 내 보냅니다.

환경 변수가 현재 쉘의 환경에 추가되었으므로 스크립트에 의해 상속 된 환경에 나타납니다. 스크립트는 해당 환경 변수도 참조 할 수 있습니다.

원격 연결

글로벌 환경 변수는 원격 로그인 세션에 액세스 할 수 있지만 로컬로 정의 된 환경 변수를 원격으로 사용할 수있게하려면 해당 환경 변수를 .bash_profile 파일. 에서 동일한 환경 변수를 설정할 수 있습니다 .bashrc.bash_profile 다른 값을 가진 파일. 예를 들어, 시스템을 로컬 또는 원격으로 사용하는 사람들의 동작을 수정하기 위해 스크립트를 통해 선택할 수 있습니다.

(혼란 문제의 위험이 있으므로 .profile 파일. 환경 변수 정의도 보유 할 수 있습니다. 그러나, 그 .profile 파일이 읽히지 않으면 .bash_profile 파일이 존재합니다. 따라서 가장 안전한 방법은 bash호환 방식 — .bash_profile 파일.)

편집하려면 .bash_profile 파일, 우리는 사용합니다 gedit 다시:

gedit .bash_profile

터미널 창에서 gedit .bash_profile

이전에 사용한 것과 동일한 환경 변수를 동일한 값으로 추가합니다.

새 환경 변수가 추가 된 편집기에서 .bash_profile 파일이 열립니다.

변경 사항을 저장하고 닫으십시오. gedit.

다른 컴퓨터에서는 SSH 테스트 컴퓨터에 연결합니다.

ssh dave@howtogeek.local

터미널 창에서 ssh dave@howtogeek.local

연결되면 스크립트를 한 번 더 실행합니다.

./envtest.sh

터미널 창에서 ./envtest.sh

그만큼 .bash_profile 원격 로그인 초기화의 일부로 파일을 읽었으며 INHERITED_VAR 환경 변수는 우리와 스크립트에 액세스 할 수 있습니다.

환경 변수 설정 해제

환경 변수를 설정 해제하려면 unset 명령. 전역 환경 변수를 설정 해제하면 WEBSITE, 내 보낸 환경 변수, INHERITED_VAR명령 줄이나 하위 프로세스에서 더 이상 사용할 수 없습니다.

unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE

Linux의 Bash에서 환경 변수 설정 해제

이 세션에서 전역 환경 변수의 가용성 만 변경한다는 점에 유의하십시오. 동시에 로그인 한 다른 사람은 여전히 ​​해당 글로벌 환경 변수 인스턴스에 액세스 할 수 있습니다. 그의 인스턴스는 초기화되었고 /etc/environment 그의 로그인 과정에서 파일을 작성하고 다른 사람의 변수 사본과는 무관합니다.

예를 들어, 사용자 mary 여전히 액세스 할 수 있습니다 WEBSITE 사용자가 환경 변수를 읽고 값을 읽습니다. dave 있다 unset 그의 세션에서 :

echo $WEBSITE

터미널 창에서 % WEBSITE를 에코합니다.

환경 관리

환경 변수를 사용하여 스크립트와 응용 프로그램이 동작 방식을 알 수 있습니다. 설정 또는 소량의 데이터를 저장하는 데 사용할 수 있습니다. 예를 들어, 스크립트는 파일에 쓰지 않고도 다른 스크립트가 참조 할 수있는 값으로 환경을 채울 수 있습니다.