/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という2つのファイルを含む(一時的な可能性がある)ディレクトリを作成します。 .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の実行の間。その後は一般的な対話型セッションです。