/venv/bin/activate
일부 환경 변수를 설정하는 스크립트가 있습니다 . zsh를 시작하고 이 스크립트를 가져온 다음 일반적인 대화형 세션을 계속하는 방법을 찾고 있습니다. 이 세션을 종료하면 다시 돌아오는 세션에서는 환경 변경 사항을 인식할 수 없습니다 activate
. 어떻게 zsh를 이렇게 호출할 수 있나요?
(이것은 다음과 같다.이것단, bash 대신 zsh를 사용한다는 점만 빼면요. )
답변1
스크립트가 환경 변수만 설정하는 경우 activate
셸에서 해당 변수를 읽은 다음 새로운 대화형 zsh 인스턴스를 실행할 수 있습니다.
sh -c '. /venv/bin/activate; exec zsh -i'
래퍼 셸은 스크립트 가 호환되는지 여부를 포함하여 sh
구문 분석이 가능한 모든 셸로 대체될 수 있습니다 ./venv/bin/activate
zsh
activate
환경 변수 외에도 대화형 zsh 인스턴스는 프로세스 ID와 리소스 제한( ulimit …
) 및 신호 무시( trap '' …
)와 같은 일부 기타 프로세스 설정을 상속합니다. 반면에 셸 변수( 내보내지 않은 var=…
경우 var
), 셸 옵션( set -…
또는 shopt …
), 키 바인딩, 별칭 및 함수 정의 등 셸 자체의 설정은 유지되지 않습니다.
.zshrc
분명히 이것은 스크립트에 의해 설정된 환경 변수를 무시하면 작동하지 않습니다 activate
. 이것이 이유 중 하나입니다.*shrc
파일은 환경 변수를 설정하면 안 됩니다..
답변2
사용ZDOTDIR
~/venv_startup
예를 들어, .zshenv 및 .zshrc라는 두 파일을 포함하는 (임시일 수도 있는) 디렉터리를 만듭니다 . .zshenv 파일에는 다음 내용이 포함되어 있습니다.
source ~/.zshenv
source /venv/bin/activate
그리고 .zshrc는 말합니다
source ~/.zshrc
이제 zsh를 호출하여
zsh -c "ZDOTDIR=~/venv_startup zsh"
이는 zsh에 "여기에서 .zshenv 및 .zshrc 파일을 가져오는 것으로 시작하지 말고 $HOME
대신 이러한 이름의 파일을 가져오십시오 ."라고 말합니다. 어쨌든 그것이 /venv_startup
소스에 있는 버전이기 때문에 최종 효과는 쉘이 달릴 것이다/venv_startup
$HOME
source /venv/bin/activate
zshenv와 zshrc 실행 사이. 그 후에는 일반적인 대화형 세션입니다.