환경 변수를 어떻게 추가합니까?


364

우분투 11.04를 실행 중입니다. 터미널을 사용하여 bash 세션을 시작하고 환경 변수를 추가하고 싶습니다.

$r@hajt:~$ env THEVAR=/example

그러나 작동하지 않습니다. 그것은 THEVAR이 마지막 인 모든 변수를 보여 주지만, 다른 호출을 env표시하지 않습니다 THEVARanymore- env | grep THEVAR반환 아무것도.

마찬가지로 내보내기 ( export THEVAR=/example) 또는 다른 변수 할당 ( THEVAR=/example)이있는 스크립트 는 환경 변수를 추가하지 않습니다.

나는 내가 잘못하고 있다는 것을 알고, 그것이 단순해야한다는 것을 알고 있지만, 나는 단지 무엇을 찾을 수 없습니다.

UPDATE : 내 질문의 진정한 의미는 이것이었다 : https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(어쨌든 나는 가장 투표가 많은 답변을 선택하고 편집 한 제목을 남길 것입니다-그것은 내가 묻는 것이 아닙니다)

env 수정 된 환경에서 프로그램을 실행 한 다음 모든 변경 사항을 해제합니다.


1
.bashrc에서 정의 / 내보내기 할 때 제대로 작동합니다.
발끈


1
어때요 THEVAR=/example?
Oleh Prypin

2
다른 하나는 전역 변수에 관한 것입니다. 따로 보관하겠습니다.
Lekensteyn

답변:


570

현재 쉘에 대해서만 변수를 설정하려면 다음을 수행하십시오 .

VARNAME="my value"

현재 쉘 및 현재 쉘에서 시작된 모든 프로세스에 대해 설정하려면 다음을 수행하십시오 .

export VARNAME="my value"      # shorter, less portable version

이후의 모든 bash 세션에 대해 영구적으로 설정하려면 디렉토리 의 .bashrc파일에 해당 행을 추가 하십시오 $HOME.

영구적으로 설정하고 시스템 전체 (모든 사용자, 모든 프로세스) 를 설정하려면 / etc / environment에 set variable을 추가하십시오.

sudo -H gedit /etc/environment

이 파일은 다음과 같은 변수 할당 만 허용합니다.

VARNAME="my value"

export여기서 키워드를 사용하지 마십시오 .

환경 변수가 변경되도록 현재 사용자에서 로그 아웃 한 후 다시 로그인해야합니다.


29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot

1
@ Mr.Hyde가 네, 아마 적당한 장소
마이클 Šrajer

1
@BharadwajRaju 일부 오래된 UNIX 시스템에서는 이미 설정된 변수 만 내보낼 수 있습니다. 예를 들어 이전 Solaris 및 HP-UX
Michał Šrajer

1
환경 변수를 설정 한 후 환경 변수가 설정되어 있는지 확인하려면 어떻게 빨리 볼 수 있습니까?
Rod

1
@Rodecho $myvar
Qwerty

29

환경 변수를 한 번 설정하려면 export쉘 스크립트가 아닌 프롬프트에서 다음 명령을 사용하십시오 .

$ export THEVAR=/example

변수는 나머지 쉘 세션 동안 또는 설정 해제 될 때까지 설정됩니다.

매번 환경 변수를 설정하려면 파일 (또는 쉘에 적합한 초기화 파일) 의 export명령을 사용하십시오 .bashrc.

스크립트에서 환경 변수를 설정하려면 스크립트에서 export명령을 사용한 다음 스크립트를 사용하십시오 source. 스크립트를 실행하면 작동하지 않습니다.

: 소싱과 실행 사이의 차이에 대한 설명이 답변을 참조 https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-을 bash-script / 176788 # 176788


4
스크립트를 실행해야만 어떻게 작동합니까? 소싱하지 않고.
미스릴

19

Ubuntu에서 새 환경 변수를 영구적으로 추가하려면 (14.04에서만 테스트) 다음 단계를 사용하십시오.

  1. 터미널을 엽니 다 (을 누름 CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. 비밀번호를 입력하십시오
  4. 방금 연 텍스트 파일을 편집
    추가 할 경우 예 FOO=bar, 그럼 그냥 쓰기 FOO=bar새로운 라인
  5. 저장해
  6. 일단 저장되면 로그 아웃하고 다시 로그인하십시오.
  7. 필요한 사항이 변경되었습니다.

5
sudo gedit( askubuntu.com/questions/270006/… 참조 ) 및에 대한 더 위험한 부분을 제거하여 귀하의 답변을 정리했습니다 chmod 777. 후자는 시스템 구성 파일에서 수행해서는 안됩니다.
muru

특정 경우에 대한 정답입니다. 사용자 셸 세션 여부에 관계없이 모든 세션은 여기에 설정된 변수 값을 가져옵니다. 그것은이 쉘 스크립트처럼 보일 수도 있지만 것이 중요합니다, 그것은하지 않습니다 - 당신은 (같은 쉘 함수를 사용하여 대 환경 변수를 설정할 수 있습니다 if또는 test)
톰 해리슨 주니어

bar가 문자열이면 따옴표 사이에 넣어야합니까? 처럼 Foo="bar"?
blue_chip

@blue_chip 아니오, 따옴표없이 작동합니다.
Upvote를 클릭하십시오

4
환경 변수의 경우 @blue_chip, 모든 것이 문자열입니다. 공백이 포함 된 경우 따옴표 만 필요합니다.
Ruslan

8

스크립트가 완료된 후 환경 / var 변경 사항을 유지하려면 다음 source ./script.sh과 같이 소스 "."에 대한 속기 표기법 을 사용해야 합니다.. ./script.sh

소스는 마치 입력 한 것처럼 스크립트에서 명령을 실행합니다. 따라서 종료와 같이 스크립트의 일부 측면을 변경합니다. 따라서 스크립트가 무언가를 확인하고 거짓 인 경우 종료하기로 결정합니다 (예 : 을 호출 exit 0하면 현재 터미널 / 쉘 세션이 종료됩니다.


이것은 이미 받아 들여진 대답과 다른 몇 가지가있는 아주 오래된 질문입니다 ... 더 최근의 질문에 대답하십시오 고려하십시오 ...
NerdOfCode

3
@NerdOfCode이 답변은 여전히 관련 이있는 문제를 해결 하며 허용 된 답변을 포함하여 다른 답변은 언급하지 않습니다. 내가 볼 수있는 한 언급하십시오. 그래서 이것은 권장
ZANNA

1
이것은 내가 찾던 것입니다. 스크립트에서 스크립트에서 내 보낸 변수를 확인해야했습니다.
albanx

5

스크립트를 통해 작업을 수행하는 경우 환경 변수를 영구적으로 설정하는 쉬운 방법은 스크립트의 명령문 아래에 있습니다.

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

pwd와 같은 표현식을 평가해야하는 경우이를 사용할 수 있습니다 (예 :

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1

꽤 늦었지만 모든 사용자에 대해 환경 변수를 추가하려는 경우 (예 : JAVA 사용) 다음을 수행 할 수 있습니다.

1) /etc/bash.bashrcnano를 사용하여 개방하십시오 (편집기를 사용하면 VIM을 선호하지 않습니다. 사용자 친화성에 관해서는 최악입니다. 개인적인 것은 아닙니다).

2) 파일에 추가하십시오.

export VAR=path export PATH=$PATH:/bin 3) (상자를 반송 할 수 있다면 더 좋을 것입니다) 또는 단순히 새로운 SSH 세션을 열고`env '명령을 사용하여 확인하십시오.

그러나 각 사용자가 이것에 대해 별도의 설정을 갖기를 원한다면 .bashrc아래의 파일을 변경 (스크립트로 작성)해야 합니다 ~/.bashrc(또는 /home/$USER/Linux 시스템을 처음 사용하는 경우)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.