こんなことないですか?
- screenを立ち上げてwindowを一つ開く。
- そのwindow上である一つの環境変数を設定する。
- screen上にもう一つwindowを開く。
- 2で設定した環境変数が新しいwindowに引き継がれてない!
上記の状況を改善する方法です。
方法のポイント
1.普段 export で環境変数(例:XTEST)を設定するところ、以下のようにwrapした別の関数で行うようにし、それに併せて screen の環境変数に設定するようにします。
function export_xtest { export XTEST=$1 screen -X eval "setenv SCREEN_XTEST ${XTEST}" }
2.そしてscreen上にwindowを開いたとき、XTESTにscreenの環境変数を引き取るようにします。
bind c eval 'screen 1' 'echo "export XTEST=$SCREEN_XTEST"'
設定例
.bashrc
if [ -n "$XTEST" ]; then export XTEST=$XTEST fi if [ -n "$SCREEN_XTEST" ]; then export XTEST=$SCREEN_XTEST unset SCREEN_XTEST fi if [ -n "$XTEST" ]; then PS1="[\u@\h:\w $XTEST] \$ " else PS1="[\u@\h:\w] \$ " fi function export_xtest { export XTEST=$1 tscreen -X eval "setenv SCREEN_XTEST ${XTEST}" source ${HOME}/.bashrc }
.screenrc
hardstatus alwayslastline '%m/%d %02c:%s %{= .g}%H%{-} %L=%-w%45L>%{=u g.}%n %t%{-}%+w %-17<%=%{= .y}(%l)' screen 1 bind c eval 'screen 1' 'echo "export XTEST=$SCREEN_XTEST"'
実行例
2.環境変数を設定します。
3.新たなwindowを開きます。環境変数が引き継がれていることがわかります。
4.環境変数を上書きします。
5.新たなwindowを開きます。上書かれた環境変数が引き継がれていることがわかります。
参考資料
- -X オプションについて
- setenv について
- hardstatus について