ZSH를 사용할 때 /etc/profile.d에서 PATH를 어떻게 설정합니까?


22

zsh쉘로 사용하고 있으며 환경을 구성하려고합니다.

나는 보통 $JAVA_HOME파일을 만들어서 변수를 정의 합니다.

/etc/profile.d/java.sh

다음 내용으로

export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH

그런 다음 로그 아웃하고 다시 로그인하면 모두 작동하지만 어떤 이유로 PATH변수가 설정되지 않았습니다. JAVA_HOMEnew는 인식 하지 않지만 PATH다음 터미널 스 니펫을 참조하십시오.

~  echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_05
~  echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

jvm에서 명령을 실행하여 확인했습니다.

~  java -version
zsh: command not found: java

에 포함되어 PATH있지 않습니다 $JAVA_HOME. 확인해야 할 것이 있습니까?

내가 실행하면 확인했습니다.

source /etc/profile.d/java.sh

모든 것이 올바르게 실행되고 변수가 정상적으로 설정되지만 스크립트가 /etc/profile.d자동으로 실행 되어서는 안 됩니까?


~/.profile대신 변수를 편집 하고 배치 하려고 했습니까 ? 의 PATH다른 곳에서 덮어 쓴 것일 수 있습니다 /etc/profile.d/.
saiarcot895

답변:


27

내 관점에서 볼 때 가장 좋은 방법은 ~/.zshrc파일에 다음 줄을 추가하는 것입니다 (아직없는 경우 작성).

if [ -d "/path/to/jdk" ] ; then
    export PATH="/path/to/jdk/bin:$PATH"
fi

그런 다음을 다시 시작 zsh하거나 실행 source ~/.zshrc한 다음 PATH를 원하는대로 정확하게 입력하십시오.

또는 시스템 전체를 변경하려면 이전 코드를 /etc/zsh/zshenv파일 끝에 추가 하십시오.

그러나 어떤 경우에도 /etc/profile.d에서 스크립트를 자동으로 실행 하는 데 사용하지 마십시오 zsh. 이 디렉토리는 귀하의 경우와 달리 bash쉘 에만 유용합니다 zsh. 이 오픈 이해하려면 /etc/profileA는 파일, bash는 초기화 파일 어떠한 경우에 zsh을의 초기화 파일을 , 당신은 파일의 끝에 곳을 볼 수 있습니다 :

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

그래서에서 스크립트 /etc/profile.d디렉토리가 자동으로 실행됩니다 zsh당신처럼 zsh을 초기화 파일의 이전 코드를 추가 할 경우에만 /etc/zsh/zprofile예를 들어, 또는 소스 /etc/profile에서 /etc/zsh/zprofile파일.


4
아마도 ~/.zprofile보다 낫습니다 ~/.zshrc.
muru

3

하나의 .zshenv파일에 모든 것을 빠르게 배치하는 것은 관리하기 어려워집니다. oh-my-sh 를 설치 한 다음 .oh-my-sh/custom/디렉토리에 다양한 사용자 정의 (env vars, 함수)를 별도의 .zsh파일 로 배치하는 것이 좋습니다 .

또한이 방법은와 같은 env 변수를 수정할 때 기계에 ssh 's 할 때 완벽하게 작동한다는 것을 발견했습니다 PATH. 또한 사용자 정의를 백업하고 동기화하는 데 vcsh 와 함께 작동 합니다.


오 내 zsh 프레임 워크를 사용하여 ssh 액세스에 사용할 IP 주소 (원격 서버)가있는 변수를 어디에 두겠습니까? git 용 ip와 서버에 대한 로그인 스크립트가 필요합니다.
Timo

1
흠. 무슨 뜻인지 잘 모르겠습니다. 나는에 ssh를 위해 IP 주소와 사용자 이름과 같은 설정을 둘 것~/.ssh/config
dvim

vcsh를 사용하는 이점을 좋아하고 ZSH의 "custom"폴더는 이와 같은 것들에 이상적인 장소이므로 개인적 으로이 대답을 선호합니다.
Erick Brown

1

이후 JAVA_HOME설정, 당신은 당신이 그 스크립트가 자동으로 공급되도록하지 않은 확인했다?

유일한 논리적 설명은 PATH나중에 어떻게 든 설정됩니다. 그것은 원래 PAM에 의해 설정되어야합니다. 이것은 /etc/environment내가 아는 한 /etc/profile.d/*.sh파일이 소스 되기 전에 발생 합니다. 아마도 zsh는 bash와 비교하여 다르게 작동합니다.


0

업데이트를 실행 한 후 로컬에서이 문제가 발생했습니다. 뿌리 문제는 Drush가 pdo를 포함하는 php의 합법적 사본을 찾을 수있는 곳을 모른다는 것 같습니다. 다행히도 환경 변수 에서이 경로를 숨길 수 있도록 지원하므로 명령 줄 에서이 작업을 수행했습니다.

export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"

문제가 해결되어 .zshrc를 편집하고 파일에 추가하면 문제가 해결되었습니다.


1
그래서, 당신은 최고 답변.zshrc 과 같은 것을 사용하도록 제안하고 있습니까?
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.