실행된 스크립트에서 내 $PATH가 다른 이유는 무엇입니까?

실행된 스크립트에서 내 $PATH가 다른 이유는 무엇입니까?

gnome 터미널 내부에 echo $PATH:

/home/pc/less.js/bin:/home/pc/local/bin:/home/pc/local/bin:/home/pc/.rvm/gems/ruby-1.9.2-head/bin:/ home/pc/.rvm/gems/ruby-1.9.2-head@global/bin:/home/pc/.rvm/rubies/ruby-1.9.2-head/bin:/home/pc/.rvm/bin :/usr/local/bin:/home/pc/local/bin:/usr/lib64/mpi/gcc/openmpi/bin:/home/pc/bin:/usr/local/bin:/usr/bin:/ bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin:/home/pc/Programming/Software/tup:/home/pc/Programming/ 라이브러리/depottools:/home/pc/Programming/Libraries/apache-maven-3.0.4/bin

이 스크립트 내부에서:

#!/bin/zsh
echo $PATH
while inotifywait -e modify /home/pc/vbox-shared/less; do
    lessc custom.less > /home/pc/vbox-shared/less/custom.css
done

/usr/lib64/mpi/gcc/openmpi/bin:/home/pc/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/ usr/게임:/usr/lib64/jvm/jre/bin

보시다시피 저는 .zshrc다음과 같이 파일을 수정했습니다.

내보내기 경로=/home/pc/less.js/bin:$PATH

파일로 실행할 때 스크립트에서 작동하지 않는 이유는 무엇입니까? 문제는 lessc 명령을 찾을 수 없다는 것입니다.

답변1

스크립트는 /bin/zsh대화형 또는 로그인 셸이 아니며 이 파일을 로드하지 않는 를 사용하여 실행됩니다. 에서 man zsh강조:

명령은 먼저 /etc/zshenv에서 읽혀집니다. 이는 재정의될 수 없습니다. 후속 동작은 RCS 및 GLOBAL_RCS 옵션에 의해 수정됩니다. 전자는 모든 시작 파일에 영향을 미치는 반면, 두 번째는 전역 시작 파일(여기에 /로 시작하는 경로로 표시된 파일)에만 영향을 미칩니다. 어느 시점에서든 옵션 중 하나가 설정 해제되면 해당 유형의 후속 시작 파일을 읽을 수 없습니다. $ZDOTDIR의 파일에서 GLOBAL_RCS를 다시 활성화하는 것도 가능합니다. RCS와 GLOBAL_RCS는 모두 기본적으로 설정됩니다.

그런 다음 $ZDOTDIR/.zshenv에서 명령을 읽습니다. 쉘이 로그인 쉘인 경우 /etc/zprofile에서 명령을 읽은 다음 $ZDOTDIR/.zprofile에서 읽습니다. 그런 다음 쉘이 대화형이면 /etc/zshrc에서 명령을 읽은 다음 $ZDOTDIR/.zshrc에서 명령을 읽습니다.. 마지막으로, 쉘이 로그인 쉘이면 /etc/zlogin 및 $ZDOTDIR/.zlogin을 읽습니다.

스크립트는 호출된 환경을 상속하며, 이것이 다른 (대화형) 셸이 아닌 경우 에서 설정한 기본 설정을 포함하지 않습니다 .zshrc.

PATH전체적으로 적용되는 위치를 설정하거나 (예: /etc/zshenv), 스크립트에서 직접 명시적으로 설정하거나, 대신 실행 /bin/zsh -i되도록 shebang 스크립트 헤더를 변경하여 로드할 수 있습니다 .zshrc(인용문 사용)man zsh :쉘이 대화형이 되도록 강제합니다. 실행할 스크립트를 지정하는 것은 여전히 ​​가능합니다.).

또는 기본값이 아닌 프로그램의 전체 경로를 지정하십시오 PATH(예: ) /home/pc/less.js/bin/lessc.

답변2

zsh 시작 파일(rc 파일이라고도 함)

아래의 전체 경로가 아닌 파일 이름은 일반적으로 홈 디렉터리인 "$ZDOTDIR/" 앞에 암시적으로 표시됩니다.

zsh가 시작 스크립트 파일을 소스하는 순서는 다음과 같습니다.

/etc/zshenv– 먼저 여기에서 명령을 읽습니다. 옵션은 이를 재정의할 수 없습니다.

.zshenv

/etc/z프로필– 로그인 쉘

.z프로필– 로그인 쉘

/etc/zshrc– 대화형 쉘

.zshrc– 대화형 쉘

/etc/z로그인– 로그인 쉘

.z로그인– 로그인 쉘

두 가지 zsh 옵션은 zsh가 위 파일 중 특정 소스를 제공하는지 여부에 영향을 미칩니다. (“RCS”는 “rc”의 복수형으로 대문자로 표기됩니다.)

RCS 및 GLOBAL_RCS zsh 옵션은 기본적으로 설정됩니다.

  • RCS – 모든 시작 파일에 영향을 미칩니다.
  • GLOBAL_RCS – 전역 시작 파일("/"로 시작하는 경로 이름)에만 영향을 미칩니다.

시작 파일이 이러한 옵션 중 하나를 설정 해제하면 zsh는 해당 유형의 후속 시작 파일을 건너뜁니다.

시작 파일이 GLOBAL_RCS 옵션을 설정하면 zsh는 후속 전역 시작 파일을 제공합니다.

관련 정보