![ENV 변수를 변경하고 동일한 명령에 이를 반영할 때 새 값이 표시되지 않는 이유는 무엇입니까? [복사]](https://linux55.com/image/134018/ENV%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%98%EA%B3%A0%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EC%9D%B4%EB%A5%BC%20%EB%B0%98%EC%98%81%ED%95%A0%20%EB%95%8C%20%EC%83%88%20%EA%B0%92%EC%9D%B4%20%ED%91%9C%EC%8B%9C%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
실행하면 대신 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'