[macos] Mac OS X의 환경 변수

업데이트 : 아래 링크 에 완전한 답변이 없습니다 . 경로 나 변수를 두 위치 (GUI와 셸에 각각 하나씩)로 설정해야하는 것은 절실합니다.

중복되지 않음 : OS X에서 환경 변수 설정?


환경 변수를 설정하고 수정하기 매우 쉬운 Windows 배경 (시스템 속성> 고급> 환경 변수로 이동)에서 나오면 Mac OS 10.5에서는 그렇게 간단하지 않은 것 같습니다. 대부분의 참조는 / etc / profile 또는 ~ / .profile을 업데이트해야한다고 말합니다. 그것들은 시스템 변수와 사용자 변수에 해당합니까? 예를 들어 JAVA_HOME변수를 어디에 설정해야 합니까?


편집하다:

Eclipse와 같은 앱뿐만 아니라 터미널에서 변수에 액세스 할 수 있기를 원합니다. 또한이 기능을 적용하기 위해 다시 시작 / 로그 아웃하지 않아도되기를 바랍니다.



답변

복제 할 필요가 없습니다. 을 사용하여 시작된 프로세스 (및 하위 프로세스, 즉 Spotlight에서 시작한 모든 프로세스)가 사용하는 환경 변수를 설정할 수 있습니다 launchctl setenv.

예를 들어, 현재 경로를 설정 한 후 .bashrc또는 어디에서나 시작한 후 현재 경로를 미러링하려면 다음을 수행하십시오 .

PATH=whatever:you:want
launchctl setenv PATH $PATH

실행중인 응용 프로그램에서 환경 변수가 자동으로 업데이트되지 않습니다. 업데이트 된 환경 변수를 얻으려면 응용 프로그램을 다시 시작해야합니다 (단, 셸에서 변수를 설정할 수는 있지만 PATH=whatever:you:want터미널을 다시 시작할 필요는 없습니다).


답변

환경 변수를 설정할 수있는 곳이 몇 군데 있습니다.

  • ~/.profile: 터미널에서 시작된 모든 프로그램에서 설정하려는 변수에이 값을 사용하십시오 (Linux와 달리 Terminal.app에서 열린 모든 쉘은 로그인 쉘임).
  • ~/.bashrc: 로그인 쉘이 아닌 쉘에 대해 호출됩니다. 상속 된 환경 변수가 아닌 서브 쉘에서 재정의해야하는 별명 및 기타 항목에이를 사용하십시오.
  • /etc/profile: ~ / .profile 전에로드되지만 그렇지 않은 경우에는 동일합니다. 변수를 시스템의 모든 사용자가 시작한 터미널 프로그램 (bash를 사용한다고 가정)에 적용하려는 경우이 변수를 사용하십시오.
  • ~/.MacOSX/environment.plist: 로그인시 loginwindow로 읽습니다. 10.5 (10.6 아님)에서 Spotlight가 시작한 응용 프로그램을 제외하고 GUI 응용 프로그램을 포함한 모든 응용 프로그램에 적용됩니다. 변경 사항을 적용하려면 로그 아웃했다가 다시 로그인해야합니다. 이 파일은 OS X 10.8부터 더 이상 지원되지 않습니다.
  • 사용자 launchd인스턴스 : 이는 사용자, GUI 및 CLI가 시작한 모든 프로그램에 적용됩니다. 의 setenv명령을 사용하여 언제든지 변경 사항을 적용 할 수 있습니다 launchctl. 이론적으로 , 당신은 넣을 수 있어야 setenv에서 명령을 ~/.launchd.conf하고, launchd사용자가 로그인 할 때 자동으로 읽어 것이지만,이 파일에 대한 연습 지원에 구현되지 않았습니다. 대신 다른 메커니즘을 사용하여 로그인시 스크립트를 실행하고 해당 스크립트를 호출 launchctl하여 launchd환경 을 설정할 수 있습니다.
  • /etc/launchd.conf: 이것은 시스템을 시작할 때와 사용자가 로그인 할 때 시작하여 읽습니다. 시작된 프로세스는 루트 프로세스이므로 시스템의 모든 단일 프로세스에 영향을줍니다. 실행중인 루트 시작에 변경 사항을 적용하기 위해 명령을에 파이프 할 수 있습니다 sudo launchctl.

이해해야 할 기본 사항은 다음과 같습니다.

  • 환경 변수는 분기 시점에 프로세스의 자식에 의해 상속됩니다.
  • 루트 프로세스는 시작된 인스턴스이며 사용자 세션마다 별도의 시작된 인스턴스가 있습니다.
  • launchd를 사용하면 launchctl;를 사용하여 현재 환경 변수를 변경할 수 있습니다 . 업데이트 된 변수는 그때부터 분기되는 모든 새로운 프로세스에 의해 상속됩니다.

시작된 환경 변수 설정의 예 :

echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl

이제 변수를 사용하는 GUI 앱을 시작하십시오.

작동 ~/.launchd.conf하지 않는 사실을 해결하기 위해 다음 스크립트를 넣을 수 있습니다 ~/Library/LaunchAgents/local.launchd.conf.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl &lt; ~/.launchd.conf</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

그런 다음 setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE안에 넣을 수 ~/.launchd.conf있으며 각 로그인마다 실행됩니다.

이런 방식으로 명령 목록을 launchctl로 파이핑 할 때 공백을 포함하는 값으로 환경 변수를 설정할 수 없습니다. 필요한 경우 다음과 같이 launchctl을 호출 할 수 있습니다 launchctl setenv MYVARIABLE "QUOTE THE STRING"..

또한 로그인시 실행되는 다른 프로그램은 런치 에이전트 이전에 실행될 수 있으므로 설정 한 환경 변수가 표시되지 않을 수 있습니다.


답변

OP가 찾고있는 것은 단순한 Windows와 같은 솔루션이라고 생각합니다.

여기 나중에 간다 :

https://www.macupdate.com/app/mac/14617/rcenvironment


답변

리눅스에서 읽을 수 있습니다. Mac OS X과 거의 비슷합니다. 또는 좀 더 가까운 BSD 유닉스를 읽을 수 있습니다. 대부분 리눅스와 BSD의 차이점은 그다지 중요하지 않습니다.

/etc/profile 시스템 환경 변수입니다.

~/.profile 사용자 별 환경 변수입니다.

“JAVA_HOME 변수를 어디에 설정해야합니까?”

  • 여러 사용자가 있습니까? 그들은 상관합니까? ?를 변경하여 다른 사용자를 혼란스럽게 하시겠습니까 /etc/profile?

일반적으로 유일한 사용자 인 경우에도 시스템 전체 설정을 망설이지 않는 것이 좋습니다. 로컬 설정을 편집하고 싶습니다.


답변

GUI 앱의 경우을 만들고 편집해야 ~/.MacOSX/environment.plist합니다. 자세한 내용은 여기를 참조 하십시오 . 이를 적용하려면 로그 아웃해야합니다. 그것들이 터미널에서 시작된 응용 프로그램에도 영향을 미치는지 확실하지 않지만 그럴 것이라고 가정합니다.

터미널에서 시작된 앱의 경우 ~ / .profile 파일을 편집 할 수도 있습니다.


답변

터미널에서 ~/.profile파일을 열고 다음을 nano입력하십시오.

export PATH=whatever/you/want:$PATH

이 파일을 저장하십시오 (cmd + X 및 Y). 그런 다음 로그 아웃 / 로그인하거나 다시 터미널에서 새 탭을 열고 새 변수를 사용해보십시오.

무엇이든 / 원하는 / 뒤에 “: $ PATH”를 추가하는 것을 잊지 마십시오. 그렇지 않으면 그 전에 있던 PATH 변수의 모든 경로가 지워집니다.


답변

osx-env-sync 를 사용하여 단일 소스에서 명령 행 및 GUI 애플리케이션의 OS X 환경 변수를 동기화하십시오 .

또한 관련 질문에 대한 답변을 여기에 게시했습니다 .