GNU/Linux >> Linux の 問題 >  >> Linux

新しいグラフィカルログインを反映するために画面セッション環境変数を更新していますか?

screen からシェルスクリプトを開始することはできません 古い環境を継承するためです。ただし、fifo を使用して、新しい環境変数を古い画面セッションに取得することができます。グラフィカル セッションを開始するときに、その fifo を埋めることができます。

#!/bin/bash
FIFO=/tmp/your_variables
[ -e $FIFO ] && cat $FIFO > /dev/null || mkfifo $FIFO

# save number of variables that follow
NVARS=2
echo $NVARS > $FIFO
echo ENV1=sth1 > $FIFO
echo ENV2=sth2 > $FIFO

ログイン時にバックグラウンドでそのスクリプトを開始します (スクリプトからすべての変数が読み込まれたときにのみ終了します)。

これで、FIFO から読み取ることができます。この関数を .bashrc に追加します

update_session() {
  FIFO=/tmp/your_variables

  NVAR=$(cat $FIFO)
  for i in $(seq $NVAR); do
    export $(cat $FIFO)
  done
  #delete the pipe, or it will not work next time 
  rm $FIFO
}

古い screen でできるように セッション

update_session

setenv を呼び出すことができます Ctrl を使用して、画面プロセスの環境変数を対話的に変更するコマンド -A +:setenv (: に注意してください 文字を入力して画面コマンドを入力します。) 環境変数の名前と値を求めるプロンプトが表示されます。

(他の回答/コメントによると)これは(親)画面プロセスに影響するため、新しく作成された画面セッションに影響しますが、現在の画面セッションや既存の画面セッションには影響しないことに注意してください。

必要に応じて、環境変数の名前と値を同時に指定できます:Ctrl -A +:setenv DISPLAY :100 .新しい画面セッションでは、DISPLAY を ":100" に設定します。

環境変数を削除するには、「unsetenv」を使用できます。 Ctrl -A +:unsetenv DISPLAY


これを行うスクリプトを実装しました。ここから入手できます:https://github.com/DarwinAwardWinner/screen-sendenv

screen-sendenv.py を入れた後 あなたの $PATH に 、.bashrc で次のスニペットを使用できます:

VARS_TO_UPDATE="DISPLAY DBUS_SESSION_BUS_ADDRESS SESSION_MANAGER GPG_AGENT_INFO"
screen_pushenv () {
  screen-sendenv.py -t screen $VARS_TO_UPDATE
}
tmux_pushenv () {
  screen-sendenv.py -t tmux $VARS_TO_UPDATE
}
screen_pullenv () {
  tempfile=$(mktemp -q) && {
    for var in $VARS_TO_UPDATE; do
      screen sh -c "echo export $var=\$$var >> \"$tempfile\""
    done
    . "$tempfile"
    rm -f "$tempfile"
  }
}
tmux_pullenv () {
  for var in $VARS_TO_UPDATE; do
    expr="$(tmux showenv | grep "^$var=")"
    if [ -n "$expr" ]; then
      export "$expr"
    fi
  done
}

使用するには、screen_pushenv を実行するだけです screen -r を実行する前に screen セッションに再接続します。次に、screen -r でアタッチした後、 、既存のシェルの環境を screen_pullenv で更新できます . tmux 関数は、screen に似た別の端末マルチプレクサである tmux に対して同じことを行います。


Linux
  1. 切り離された画面セッションを強制終了します

  2. 画面に名前を付けるには?

  3. 一時的な環境を設定する ($PATH)

  1. 多くの環境変数の設定を解除する方法

  2. 画面セッションの名前を変更

  3. プロセスの環境変数を読み取る方法

  1. * in * / etc / environment?で環境変数を参照する

  2. Linux コンソールと ssh セッションで実行されているかどうかを確認する方法は?

  3. 環境変数の確認