3

bash 環境変数を変更して、tmux セッションで Windows に適用する簡単な方法はありますか?

グーグルで検索しても解決策が見つからなかったので、ここに質問を投稿します。

ありがとう!!

4

3 に答える 3

4

環境変数を直接変更することはできません。

ただし、tmux インスタンス内のシェル端末に新しい変数を取得させることができます。これにはいくつかの手順が必要です。

まず、tmux はそれ自体で環境変数を更新できます。update-environment構成ディレクティブがこれを行います。ここにリストされている変数はすべて自動更新されます。tmux セッションに接続すると、接続したばかりのクライアントからの値でセッションの環境変数が更新されます。したがって、 を実行tmux attachしてSSH_AUTH_SOCK設定した場合、tmux セッションは の新しい値を取得しますSSH_AUTH_SOCK

ただし、それはセッションの変数のみを更新するため、新しいペイン/ウィンドウのみが値を取得します。既存のウィンドウは古い値のままです。@ IgnacioVazquez-Abrams が言ったように、これに対する直接的な修正はありません。

ただし、多くのプログラムで修正できます。十分に最近のバージョンの tmux にはshow-environment、セッションに環境変数の現在の値を問い合わせるコマンドがあります。これにより、update-environmentロジックを使用した後、プログラム内から環境変数を取得できます。

たとえば、いくつかのシェルに新しい値を取得させることができます。ZSH では、次のprecmdフックを使用してこれを行い~/.zshrcます。

_update_ssh_agent() {
    local var
    var=$(tmux show-environment |grep '^SSH_AUTH_SOCK=')
    if [ "$?" -eq 0 ]; then
        eval "$var"
    fi
}
if [[ -n "$TMUX" ]]; then
    add-zsh-hook precmd _update_ssh_agent
fi

これにより、tmux セッション内のシェルが新しいプロンプトを表示するたびに SSH エージェントを更新するようになります。再接続したら、プロンプトで Enter キーを押すだけで、新しい SSH エージェント接続が取得されます。

Bash にはプリコマンド メカニズムもありますが、手動で構成する方法はわかりません。show-environmentvim や emacs など、自分自身を更新するために使用するプログラムをさらに構成することもできます。ただし、これを実行する各プログラムを個別に構成する必要があります。

于 2014-05-21T19:07:16.717 に答える
3

いいえ。

そして難しい方法さえありません。別のプロセスの環境変数を操作することは、せいぜい移植性がありません。

于 2012-03-28T05:35:27.660 に答える