echo $PATH
터미널 창에 있으면 다음이 출력됩니다.
/home/charles/anaconda3/bin:
/home/charles/anaconda3/condabin:
/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
/usr/local/games:/snap/bin:/snap/bin:
/home/charles/.emacs.d/bin
그러나 루트가 아닌 스크립트를 실행하면 다음과 같습니다.
#!/bin/sh
echo $PATH
내 홈 디렉터리의 경로가 아닌 루트 경로만 출력합니다.
/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
/usr/local/games:/snap/bin:/snap/bin
spyder
다음에서 제공되는 스크립트에서 실행하려고 합니다 .
$ which spyder
/home/charles/anaconda3/bin/spyder
스크립트가 내 홈 디렉토리의 경로 부분을 인식하도록 하는 방법이 있습니까?
해결됨emacs
: 경로에 및를 추가하는 코드를 에서 로 이동했습니다 anaconda
.~/.bashrc
~/.profile
답변1
스크립트는 하위 쉘에서 실행됩니다. 즉, 대화형/로그인 쉘에 의해 생성됩니다. 서브쉘은 스크립트/프로그램을 실행하기 위한 명시적인 목적으로 생성된 쉘입니다. 서브쉘에 대한 규칙 중 하나는 다음을 통해 액세스할 수 있다는 것입니다."아버지 껍질", 하지만아니요지역 변수.
이는 /home/...
변수가 다음과 같다는 것을 보여줍니다.현지의변수, 즉 어딘가에/어떻게든 설정한다는 의미입니다. 아마도 ~/.bashrc
?
해결책은 스크립트에서 로컬 PATH 변수를 선언해야 한다는 것입니다. 다음과 같이 이 작업을 수행할 수 있습니다.
export PATH="$PATH:/home/charles/anaconda3/bin:/home/charles/anaconda3/condabin:/home/charles/.emacs.d/bin"
길은 지금이다현지의스크립트/하위 쉘에 저장되며 전역 변수로 전파되지 않습니다.