환경 변수를 어디에서 선언합니까?


59

올바른 장소는 무엇입니까?

  1. 모든 사용자에게 영향을 미치는 글로벌 환경 변수?
  2. 사용자 별 환경 변수?

답변:


16

환경 변수에 대한 커뮤니티 위키 페이지 가 정렬하는 데 도움이 될 것이라고 생각 합니다.


2
문제는 링크 된 문서가 사용자 지정 변수의 부분에서 혼란 스럽거나 명백하지 않다는 것입니다. 나는 여전히 셸과 무관 한 방법을 찾으려고 노력하고 있습니다. $ HOME / .profile이 아마도 가장 좋은 방법 일 것입니다.
Rmano

16
텍스트를 붙여 넣거나 링크 된 컨텐츠의 스냅 샷을 작성하십시오. 향후 제공되지 않을 수 있습니다!
Nam G VU

4
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
토마스 워드

75

sagarchalise의 답변에 추가하기 위해 링크가 설정을위한 적절한 장소로 제안하는 것을 요약 할 수 있습니다.

전역 설정의 경우 시스템 전체 환경 변수

  • 사용하다 /etc/environment
  • 사용하지 /etc/profile않거나/etc/bash.bashrc

페이지에서 :

/etc/environment[...]는 시스템 전체 환경 변수 설정을위한 것입니다. 스크립트 파일은 아니지만 한 줄에 하나씩 할당 표현식으로 구성됩니다. 특히이 파일은 시스템 전체 로캘 및 경로 설정을 저장합니다.

사용 /etc/profile은 매우 유닉스 방식이지만 Ubuntu에서는 기능이 크게 줄어 듭니다. /etc/bash.bashrc항목 을 가리키고 수집 하기 위해서만 존재합니다 /etc/profile.d.

내 시스템에서 profile.d의 유일한 흥미로운 항목은 /etc/profile.d/bash_completion.sh입니다.

로컬 또는 사용자 별 설정

이전 버전의 Ubuntu 페이지가 권장 ~/.pam_environment되었지만 현재 페이지가 작동하지 않으면 사용할 것을 제안합니다

  • ~/.profile -이것은 환경 변수 할당을 배치하기에 가장 적합한 파일 일 것입니다. 시작 프로세스 데스크탑 세션 동안 DisplayManager와 텍스트 콘솔에서 로그인 할 때 로그인 쉘에 의해 자동으로 실행되기 때문입니다.

  • ~/.bash_profile또는 ~./bash_login-이들 중 하나가 존재 ~/.profile하면 bash가 로그인 쉘로 시작될 때가 아니라 bash가이를 실행합니다 . 배시는 선호 ~/.bash_profile합니다 ~/.bash_login. [...]이 파일은 기본적으로 그래픽 세션에 영향을 미치지 않습니다. "

  • ~/.bashrc - "... 변수를 설정하기 가장 쉬운 곳"입니다.

1
어떤 프로그램 /etc/environment을 언제 읽을 수 있습니까? SHELL=/bin/bash
SystemParadox

1
/ etc / environment는 PAM의 일부인 것 같습니다. 즉, 모든 프로세스에 기본 환경을 설정해야합니다. cron은이 환경을 고유하게 덮어 쓰는 데있어 특별합니다 (즉, 고장났습니다).
SystemParadox

.bashrc는 어떻게 동작합니까? bash_profile 후? .profile 대신?
18:50에

1
@opensas 아마도이 질문 또는 답변을 참조하여 별도의 질문으로해야합니다.
belacqua

@belacqua 내가하는 2 개 이상의 환경 변수를 추가 할 필요가 말할 수 /etc/environment원하는을 JAVA_HOME="/opt/java" 하고 ANT_HOME="/opt/ant" 어떻게 그것을 할
Kasun Siyambalapitiya

7

당신이있어:

/ etc / profile : Bourne 쉘 (sh (1)) 및 Bourne 호환 쉘 (bash (1), ksh (1), ash (1), ...)에 대한 시스템 전체의 .profile 파일.

Lucid와 Maverick에서는

/etc/profile.d/*.sh

존재하고 사용자의 쉘이 bash 인 경우 :

/etc/bash.bashrc

사용자 환경의 경우, 쉘에 특정한 혼란스러운 배열과 "로그인 쉘"로 간주되는지 여부가 있습니다. 쉘이 bash 인 경우 :

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

sh / dash의 경우 :

$HOME/.profile

zsh의 경우, 나는 이것을 이해 하려고 시도조차하지 않을 것 입니다.


5

https://help.ubuntu.com/community/EnvironmentVariables에서 권장하는대로 :

  1. 모든 사용자에게 영향을 미치는 글로벌 환경 변수는 들어가야 /etc/environment합니다.

  2. 사용자 별 환경 변수는에 설정해야합니다 ~/.pam_environment.

우분투에서 환경 변수를 설정하기 위해 프로파일 및 rc 파일을 피하십시오. 그들은 나보다 더 많은 두통을 일으켰습니다.

그러나 이것은 말보다 쉽습니다.)

나에게 존재했던 것과 동일한 구성 격차가 발생할 수 있습니다. 아래에서 암호화 된 홈에 대한 해결 방법을 참조하십시오.

~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

왜 못생긴 정적 경로입니까? ${PATH}나를 위해 작동하지 않습니다. 나는 내 로그인을 여러 번 돌파하여 해결하려고 노력했다. 그래서 디폴트의 추악한 정적 사본을 고수하고있다 :)

암호화 된 홈 폴더에 대한 해결 방법

Ubuntu 릴리스에서 Precise 12.04 Beta 2까지는 암호화 된 홈 디렉토리를 사용하는 경우 /etc/pam.d/common-session이를로드 하도록 수정해야합니다 ~/.pam_environment. 이 솔루션은 분명히 이전 릴리스에서 작동하지만 테스트하지는 않았습니다.

Guenther Montag (g-montag)는 2010-08-19에 썼습니다 :

암호화 된 홈 디렉토리에 문제가있는 것 같습니다. 나는 덧붙였다

필요한 세션 pam_env.so

/etc/pam.d/common-session의 끝에서 ~ / .pam_environment를 읽습니다. 암호화 된 홈 디렉토리 (또한 10.04)가없는 다른 시스템에서는 해결 방법이 필요하지 않습니다. 아마도 내 경우에는 시스템이 해독되기 전에 ~ / .pam_environment를 읽으려고합니다.

슈퍼 유저에 대한 나의 답변에서 적응 : https://superuser.com/a/408373/66856


이것은 여전히 ​​잘못입니다. ${HOME}작동하지 않습니다. 에 확장이 없습니다 .pam_environment.
detly

2
@detly에 확장이 .pam_environment있지만 HOME일반적으로 초기에 설정되지 않았습니다. 해당 줄이 읽은 경우 삽입 된 DEFAULT=${PATH}/Applications/jdk값을 보았을 PATH것입니다.
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.