특정 파일을 얻기 위해 새 zsh 인스턴스를 시작하는 방법은 무엇입니까?

특정 파일을 얻기 위해 새 zsh 인스턴스를 시작하는 방법은 무엇입니까?

/venv/bin/activate일부 환경 변수를 설정하는 스크립트가 있습니다 . zsh를 시작하고 이 스크립트를 가져온 다음 일반적인 대화형 세션을 계속하는 방법을 찾고 있습니다. 이 세션을 종료하면 다시 돌아오는 세션에서는 환경 변경 사항을 인식할 수 없습니다 activate. 어떻게 zsh를 이렇게 호출할 수 있나요?

(이것은 다음과 같다.이것단, bash 대신 zsh를 사용한다는 점만 빼면요. )

답변1

스크립트가 환경 변수만 설정하는 경우 activate셸에서 해당 변수를 읽은 다음 새로운 대화형 zsh 인스턴스를 실행할 수 있습니다.

sh -c '. /venv/bin/activate; exec zsh -i'

래퍼 셸은 스크립트 가 호환되는지 여부를 포함하여 sh구문 분석이 가능한 모든 셸로 대체될 수 있습니다 ./venv/bin/activatezshactivate

환경 변수 외에도 대화형 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 실행 사이. 그 후에는 일반적인 대화형 세션입니다.

관련 정보