실행하면 대신 PATH=abc:$PATH echo $PATH
이전 값을 얻습니다 .PATH
abc:PATH
왜 이런거야? 어떻게 얻을 수 있나요 abc:$PATH
?
PATH=/mybin:$PATH which python
편집: /mybin
Python 실행 파일이 있으면 어떻게 되나요?
답변1
당신이 달릴 때
PATH=abc:$PATH echo $PATH
또는 보다 일반적인 경우에는
variable=value utility
그런 다음 variable
환경에서 설정합니다 utility
(현재 환경에서는 설정하지 않음).
그러나 명령줄을 구문 분석하면 변수 값이 PATH
다음과 같이 변경됩니다.현재의환경.
변수가 확장된 환경에서 변수를 설정해야 합니다. 다음과 같이 두 단계로 나누어 이 작업을 수행할 수 있습니다.
PATH=abc:$PATH; echo "$PATH"
이는 PATH
현재 환경에서 설정되며,그 다음에echo "$PATH"
아래와 같이 실행 하거나 서브셸에 대한 변수를 설정합니다.
PATH=abc:$PATH sh -c 'echo "$PATH"'
PATH
이렇게 하면 변수가 에 설정되지만 sh -c
현재 셸에는 설정되지 않습니다.
두 번째 예에서는
PATH=/mybin:$PATH which python
유틸리티 는 which
해당 환경에서 수정한 이후 python
발견되었다고 말할 수 있습니다. 현재 환경에서는 여기가 확장되지 않았지만 ./mybin
PATH
PATH
which
그나저나, which python
더 잘 작성되었습니다(더 이식 가능) command -v python
(" 참조)." which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?").
ENV
" 변수" 라고 부르는 제목을 간단히 생각해 보세요 . 이 ENV
변수는 의도한 바는 아니지만 sh
일부 구현(및 일부 다른 셸)에서 사용되는 환경 변수입니다. 해당 값이 파일 이름이면 대화형 셸 세션을 시작하기 전에 파일을 가져옵니다. 비대화형 쉘에 대해 동일한 방식으로 작동하는 변수가 bash
있습니다 .BASH_ENV
답변2
그 이유는 echo $PATH
수정된 환경이 만들어지기 전에 확장이 일어나기 때문이다.
다음으로 전화해 보세요.
PATH=abc:$PATH env
실제로 명령 환경이 수정된 것을 확인할 수 있습니다.
에코 매개변수의 확장으로 인해
PATH=abc:$PATH echo $PATH
새 환경을 설정하기 전에 발생하는 상황이므로 이를 두 개의 명령으로 분할해야 합니다.
(PATH=abc:$PATH; echo $PATH)
당신이 좋아하는 일을 하세요. echo
명령 수명이 유지 되도록 환경 변경을 방지하려면 하위 셸()이 필요합니다 .
답변3
현재 셸 대신 하위 셸에서 대체를 수행합니다.
PATH=abc:$PATH sh -c 'echo $PATH'