zsh:ディレクトリの環境変数を自動的に設定します


4

以下のプロジェクトがあるとしましょう。

~/working_dir

このディレクトリからコマンドを実行するたびに、特定の環境変数を設定する必要があります。だから私はそのようにそれらをエクスポートすることができます:

export VAR=value

しかし、これらがたくさんあり、面倒です。さらに、APIキーなどを与える環境変数がないため、コマンドを実行して失敗させることもあります。

zshにこのディレクトリの環境変数を記憶させる方法はありますか。そのディレクトリからコマンドを実行するときはいつでも、それらの環境変数を設定して実行することができますか?

回答:


6

これは可能です - これが スクリーンキャスト 、を使用して Grml ZSH 構成

さらに詳しい情報:

編集:これは実際にはかなり簡単です。これはあなたの関連部分です ~/.zshrc

function chpwd_profiles() {
    local profile context
    local -i reexecute

    context=":chpwd:profiles:$PWD"
    zstyle -s "$context" profile profile || profile='default'
    zstyle -T "$context" re-execute && reexecute=1 || reexecute=0

    if (( ${+parameters[CHPWD_PROFILE]} == 0 )); then
        typeset -g CHPWD_PROFILE
        local CHPWD_PROFILES_INIT=1
        (( ${+functions[chpwd_profiles_init]} )) && chpwd_profiles_init
    elif [[ $profile != $CHPWD_PROFILE ]]; then
        (( ${+functions[chpwd_leave_profile_$CHPWD_PROFILE]} )) \
            && chpwd_leave_profile_${CHPWD_PROFILE}
    fi  
    if (( reexecute )) || [[ $profile != $CHPWD_PROFILE ]]; then
        (( ${+functions[chpwd_profile_$profile]} )) && chpwd_profile_${profile}
    fi  

    CHPWD_PROFILE="${profile}"
    return 0
}
# Add the chpwd_profiles() function to the list called by chpwd()!
chpwd_functions=( ${chpwd_functions} chpwd_profiles )

必要な各ディレクトリのプロファイルを有効にします。

zstyle ':chpwd:profiles:/path/to/directory(|/|/*)' profile NAME

実際にプロファイルを作成することを忘れないでください。

chpwd_profile_NAME() {
    [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
    print "chpwd(): Switching to profile: $profile"

    export VAR=value
}

#2を編集:これは実際にはかなりカップルに結合するのがいいでしょう 名前付きディレクトリ [Stackoverflow.net]。


3
この解決策について「簡単な」ことは何もありません。
raine

@raneが同意した!私にとってはかなり複雑に見えます。
Bklyn

2

あなたが使用することができます https://github.com/horosgrisa/autoenv それを達成するために。私が使う 抗原 これをアクティブにするには:

antigen bundle horosgrisa/autoenv

それからあなたがとディレクトリに入るとき .env その中にファイルすると、それが供給され、そこに変数を入れることができます。


2

これは昔の質問ですが、私はこの簡単な解決策を追加したいと思います。 https://coderwall.com/p/a3xreg/per-directory-zsh-config

// Add this to your ~/.zshrc
function chpwd() {
  if [ -r $PWD/.zsh_config ]; then
    source $PWD/.zsh_config
  else
    source $HOME/.zshrc
  fi
}

これはうまく機能しますが、すでにロードしている場合はおそらく5行目から6行目をスキップできます。 .zshrc zshが初期化されたとき
jstr

@jstrそれは何でもリセットすることです $PWD/.zsh_config した。
aars

0

ディレクトリごとではなく、いいえ。ただし、それらが同じ場合は、起動ファイルに入れることができます(bashの場合は.bash_profile、zshの場合はわかりません)。それ以外の場合は、すべての設定をそのディレクトリのファイルに入れて、コマンドを実行する前にそれを読み込むことをお勧めします。理想的な解決策ではありませんが、私はそれがあなたが見つけることができる最高のものに近いと思います。


0

あなたはenvを設定してそのディレクトリにあなたを変えるスクリプトを作成することができます。 cd working_dir

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.