특정 디렉터리를 기반으로 경로(및 기타 환경 변수)를 설정하고 싶으므로 홈 디렉터리에 다음 파일이 있습니다.
export MY_DIR="/path/to/dir"
export PATH=$MY_DIR/bin:$PATH
export MY_OTHER_VAR="$MY_DIR/folder"
다음 줄을 사용하여 ~/.zshrc에서 해당 콘텐츠를 가져옵니다.
[[ -e ~/my_file.sh ]] && emulate sh -c ' source ~/my_file.sh
그런데 로그인을 하면 $MY_DIR/bin
내 경로에 없습니다. 만약 내가 있어야 할 곳에 echo $PATH
나는 있는 것이다 . 그러나 MY_DIR 및 MY_OTHER_VAR은 올바르게 설정되었습니다.%F{51}~%f
$MY_DIR/bin
내가 뭔가 잘못하고 있는 걸까요, 아니면 zsh의 이상한 버그인가요(bash에서는 예상대로 작동하는 것 같습니다)?
편집하다
다른 곳에서도 문제없이 source
사용했어요 . 그러나 파일을 이동하고 가져 오려고했습니다. 또한 소스 대신 사용을 시도했지만 이러한 변경에도 불구하고 경로 변수에 여전히 동일한 내용이 표시됩니다. 실제로 PATH 변수에 현재 디렉터리의 모든 내용이 표시되는 것을 확인했습니다. 예를 들어 및 로 이동하면 이 표시됩니다.~
zshrc
/etc/zsh/my_file.sh
etc/zsh/zprofile
.
%F{51}~%f
/etc/zsh/
echo $PATH
%F{51}/etc/zsh%f
재현할 완전한 코드:
/etc/zsh/zprofile
:
[[ -e /etc/zsh/my_file.sh ]] && emulate sh -c ' . /etc/zsh/my_file.sh'
/etc/zsh/my_file.sh
:
export MY_DIR="/home/matt/code"
export PATH="$MY_DIR/bin:$PATH"
export MY_PYTHON="$MY_DIR/python"
편집 2
그래서 현재 경로를 청록색으로 인쇄하는 사용자 정의 프롬프트를 사용합니다. 프롬프트를 비활성화하면 PATH 변수가 올바르게 설정됩니다. 프롬프트 스크립트에서는 내가 path
호출하는 변수(소문자)를 사용합니다. 분명히 bash는 그것을 와 혼동하지 않지만 PATH
zsh는 혼동합니다. 모두의 도움에 감사드립니다.
답변1
내 문제는 실제로 경로를 설정하려는 코드에 있는 것이 아니라 "$MY_DIR/bin:$PATH"
내가 있는 코드에 있습니다 .zshrc
. 나는 사용자 정의 스크립트를 사용하여 로 선언된 변수를 사용하는 쉘 프롬프트를 설정하고 있습니다 path
. 이것이 환경 변수와 충돌하지 않을 것이라고 생각했지만 PATH
@Adaephon이 주석에서 지적했듯이 zsh양방향 동기화키워드 path
와 PATH
.
그래서 나를 위한 해결책은 프롬프트 함수의 변수 이름을 cur_path
(또는 이와 유사한)로 바꾸는 것이었습니다. 변수를 다음과 같이 정의해보십시오.local path
세그폴트가 발생합니다.