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 に対して同じことを行います。