사용자 환경 변수는 어떻게 설정합니까? (영구적으로는 세션이 아님)


145

이것은 나를 짜증나게한다. 나는 여러 가지 제안 (모두 다른 파일과 구문을 사용)을 보았지만 그중 아무것도 작동하지 않았습니다.

특정 사용자에 대한 환경 변수를 어떻게 설정합니까? 나는 데비안 압박에 있습니다. ABC = "123"으로 만들기 위해 파일에 입력해야하는 정확한 구문은 무엇입니까?


7
당신은 이미 무엇을 시도 했습니까?
l0b0

1
.bashrc, .bash_profile, .profile 및 .ssh / eviroment 편집 내가 올바른 위치에 작성했는지 또는 매번 올바른 구문을 가지고

4
.bashrc그 주요 장소입니다.
rozcietrzewiacz

@rozcietrzewiacz : 알았지 ... ... 솔루션을 얻은 후에도 해당 파일의 시작과 끝에서 ABC1과 ABC2를 설정하려고 시도했지만 내 환경에서 설정되지 않았습니다.

1
.bash_profile와 같은 것이 포함되어 있는지 확인하십시오 [[ -f ~/.bashrc ]] && . ~/.bashrc.
rozcietrzewiacz

답변:


113

쉘의 초기화 파일에 선언을 넣어야합니다.

  • bash, ash, ksh 또는 다른 Bourne 스타일 쉘을 사용하는 경우

    ABC="123"; export ABC
    

    당신의 .profile파일 ( ${HOME}/.profile). 이것은 대부분의 유닉스 설치, 특히 데비안의 기본 상황입니다.

    로그인 쉘이 bash 인 경우 .bash_profile( ${HOME}/.bash_profile)를 사용 하거나 .bash_login대신 사용할 수 있습니다 .

    참고 : 이 파일 중 하나가 존재하고 로그인 쉘이 bash 인 .profile경우 ssh 또는 텍스트 콘솔을 통해 로그인 할 때 읽히지 않지만 .bash_profileGUI에서 로그인 하는 경우 계속 읽을 수 있습니다 . 또한가 없으면를 .bash_profile사용하십시오 .bashrc.

  • zsh를 로그인 쉘로 설정 한 경우 ~/.zprofile대신을 사용하십시오 ~/.profile.

  • tcsh를 사용하는 경우 추가

    setenv ABC "123"
    

    에서 .login파일 ( ${HOME}/.login)

  • 다른 셸을 사용하는 경우 셸 설명서에서 환경 변수를 정의하는 방법과 셸 시작시 실행되는 파일을 확인하십시오.


5
기본 동작은 su user호출하는 사용자의 홈 디렉토리와 환경을 유지하면서 현재 쉘의 소유권을 username arg로 변경하는 것입니다. 새 사용자가되는 방식으로 쉘을 입력하고 모든 환경 설정 ($ PATH, $ HOME, $ ABC 등)을 얻으려면 su의 첫 번째 인수로-를 전달해야합니다. su - username당신이 원하는 것을 성취 할 것입니다.
Tim Kennedy

1
잠깐 : "뿌려 나가다"는 것은 무엇을 의미합니까? 어쨌든 'su'를 만들면 쉘이 초기화 되지 않습니다 . 'su-'필요 (참조 man su)
Matteo

1
su처음에 했습니까? .profile사용자가 사용할 수없는 루트 소유 를 만들지 않았습니까 ?
rozcietrzewiacz

1
@acid 이것이 해야 할 일입니다. 문제는 로그인 할 때 제공되는 것입니다.이를 확인하려면 먼저 로그 아웃하십시오 .
rozcietrzewiacz

7
.profile모든 Bourne 호환 쉘에서 읽으 므로 해당 파일에 Bash 구문을 쓰면 안됩니다. 특히 export VARIABLE=value로 리팩토링해야합니다 VARIABLE=value; export VARIABLE.
tripleee

48

/etc/environment환경 변수를 설정하기 위해 파일을 사용하십시오 . 그런 다음 /etc/environment파일 안에 다음 줄을 추가 하십시오.

ABC="123"

이제 ABC 변수는 모든 사용자 세션에서 액세스 할 수 있습니다. 변수 출력을 테스트하려면 먼저 명령을 사용하여 환경 변수를 새로 고치십시오.

source /etc/environment

실행합니다 echo $ABC.


4
소스 명령의 경우 +1 그것은 모든 답변에서 빠졌습니다
Nerrve

5
/etc/environment전체 bash 구문을 지원하지 않도록 조심하십시오 . 어려운 방법을 알아 냈습니다. 예를 들어, 다음 줄에 넣은 PATH="/usr/bin:/usr/sbin"다음에 PATH="$PATH:/foo/bar"는 작동하지 않습니다.
user2428118

이것이 개인적인 문제인지 또는 무엇인지 확실하지 않지만 /etc/environmentbash 터미널을 다시 시작하거나 입력 한 경우에도 이것을 설정 한 후 OS를 재부팅해야했습니다 source /etc/environment. 따라서 환경 변수가 지속되지 않는 문제가있는 경우 재부팅을 시도하십시오.
Blairg23

9

이것은 거의 모든 쉘에 사용할 수있는 일반적인 절차입니다. 어쨌든 사용자가 일반적으로 로그인 할 쉘을 알아야합니다.

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

그런 다음이 셸에서 일반적으로 읽을 점 파일을 찾아야합니다.

man $shell

작동 할 수있는 지름길은 쉘 이름을 포함하는 도트 파일을 나열하는 것입니다.

ls ~/.*${shell}*

로그인 중에 파일 중 하나가 실제로 읽히는 지 확인하려면 파일 이름을 각 파일에 인쇄하면됩니다. 예를 들면 다음과 같습니다.

echo .bashrc

로그인 할 때 어떤 파일을 읽고 있는지 확인할 수 있으며 수정할 파일을 결정할 수 있습니다. 쉘 echo "$0"값이 $0도트 파일을 처리하는 방법 에 따라 달라 지므로 오해의 소지가있을 수 있으므로 값 을 사용하지 말아야합니다 .

변수를 "영구적으로"선언 할 때는 세션까지만 확장됩니다. 세션없이 변수의 값에 액세스 할 수있는 방법이 없으므로 그 밖의 의미는 없습니다. "읽기 전용"을 의미하는 경우 셸에 따라 다르며 Bash에서는 다음을 사용할 수 있습니다.

declare -r VAR

이미 값이 있거나

declare -r VAR=value

동시에 할당합니다. 모든 쉘에이 기능이있는 것은 아닙니다.

대부분의 쉘에서 변수를 선언하려면 변수 이름 ( [A-Za-z_][A-Za-z0-9_]*) 다음에 등호 ( 등호 주위에 공백없음 )와 값 (값이 단순한 경우가 아니라면 인용하는 것이 바람직 함)을 사용해야합니다 [A-Za-z0-9_]+. 예를 들면 다음과 같습니다.

name="John Doe"
ip=127.0.0.1
HORRIBLE=1

5

내보내기를 사용하십시오.

export ABC="123"

설정되어 있는지 확인하려면

env

그리고 / 또는

env | grep ABC

영구적으로 추가하려면 ~/.bashrc파일에 추가 하십시오.

export ABC="123"

6
그는 그것을 영구적 으로 정의하기 위해 , 즉 정의를 넣을 파일 을 알고 싶어합니다 .
Matteo

1
작동하지 않습니다. 로그 아웃하면 변수가 사라집니다. 나는 세션에 걸쳐 필요

1
당신은 의미 permenate하지 permenently: D
whoami를


5
뭐죠 permenate? 당신은 의미 permanent합니까?
SSH 이번

3

정확한 명령은 다음과 같습니다.

echo 'export ABC = "123"' >> ~/.profile

4
바로 그거죠? 진심이야? 어떤 쉘 (a)가 읽고 ~/.profile(b) 앞뒤 공간을 허용 =합니까?
G-Man

1

나를 위해 일한 가장 좋은 방법은 BASH 셸에서 .bashrc 파일을 수정하는 것입니다.

예를 들어 이것을 사용하십시오 :

  1. .bashrc 파일을여십시오
  2. 이 줄을 추가하십시오 :

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    예 : export HOME = "/home/user/"

    사용하는 것을 기억 ""사용으로 ' '작동하지 않습니다 및 소싱 동안 bashrc에 파일이 오류를보고합니다.

  3. 현재 세션에서 소스하십시오.

또한 / etc / environment 파일을 수정하려고 시도했지만 새 환경 변수를 만들 수 없었으며 소스 변수를 만들 때 정의 된 변수를 찾을 수 없다는 오류가 표시되었습니다.

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