特定のディレクトリに基づいてパス(およびその他の環境変数)を設定したいので、ホームディレクトリに次のファイルがあります。
export MY_DIR="/path/to/dir"
export PATH=$MY_DIR/bin:$PATH
export MY_OTHER_VAR="$MY_DIR/folder"
次の行を使用して ~/.zshrc からそのコンテンツを取得します。
[[ -e ~/my_file.sh ]] && emulate sh -c ' source ~/my_file.sh
ところでログインをすると$MY_DIR/bin
私のパスにはありません。もし私がいなければならないところに私はecho $PATH
いるのです。ただし、MY_DIRとMY_OTHER_VARは正しく設定されています。%F{51}~%f
$MY_DIR/bin
私は何か間違っているのでしょうか、それともzshの奇妙なバグですか(bashでは期待どおりに動作するようです)?
編集する
他の場所でも問題なくsource
使用しました。しかし、ファイルを移動してインポートしようとしました。また、ソースの代わりに使用しようとしましたが、これらの変更にもかかわらず、パス変数にはまだ同じ内容が表示されます。実際、PATH変数に現在のディレクトリのすべての内容が表示されることを確認しました。たとえば、とに行くと表示されます。~
zshrc
/etc/zsh/my_file.sh
etc/zsh/zprofile
.
%F{51}~%f
/etc/zsh/
echo $PATH
%F{51}/etc/zsh%f
再現する完全なコード:
/etc/zsh/zprofile
:
[[ -e /etc/zsh/my_file.sh ]] && emulate sh -c ' . /etc/zsh/my_file.sh'
/etc/zsh/my_file.sh
:
export MY_DIR="/home/matt/code"
export PATH="$MY_DIR/bin:$PATH"
export MY_PYTHON="$MY_DIR/python"
編集2
そのため、現在のパスをターコイズで印刷するカスタムプロンプトを使用します。プロンプトを無効にすると、PATH変数が正しく設定されます。プロンプトスクリプトは、私がpath
呼び出す変数(小文字)を使用します。明らかにbashはそれと混同しませんが、PATH
zshは混同します。みんなの助けに感謝します。
答え1
私の問題は、実際にパスを設定したいコードではなく、"$MY_DIR/bin:$PATH"
私が持っているコードにあります.zshrc
。私はカスタムスクリプトを使用して宣言された変数を使用するシェルプロンプトを設定していますpath
。これは環境変数と衝突しないと思いましたが、PATH
@Adaephonがコメントで指摘したように、zsh双方向同期キーワードpath
とPATH
。
だから私のための解決策は、プロンプト関数の変数名をcur_path
(または同様の)に変更することでした。変数を次のように定義してみてください。local path
セグフォルトが発生します。