Re: [Q] Terminal Server
Takahide Nojima <nojima@taito.co.jp> writes:
> > デバッガが親の環境変数を引き継ぐ必要があるとか?
>
> その通りです。他にも、
>
> ・親が指定してくる引数パラメータの内容、
>
> ・親がパイプ経由(STDIN)で送ってくるデータの内容、
>
> ・親が実行するカレントディレクトリ
>
> も全部親が実際に起動する時のままにしたいのです。これらを調べあげて
> 全部シェルスクリプトでエミュレートとかは避けたいです。
なるほど.じゃあ,こういうのはどうですか.
1. 待ち受け側のscreenをあらかじめ立ち上げておく(スクリプトかaliasで,
screen -S parent
とセッション名をつけておく.)
2. バックグラウンドのデバッガは
screen -m -d -S child command args...
として呼び出す.(Detached状態で立ち上げる.)
3. parentの画面をsplitし,その1つで
screen -r -m -S child
を実行して,childをattachする.
2と3については,先のon-screen, on-screen-doitスクリプトを少々変えると
できます.こんな感じ.
==> on-screen <==
#!/bin/sh
screen -S parent -X split
screen -S parent -X focus
screen -m -d -S child on-screen-doit "$@"
sleep 2
screen -S parent -X screen screen -m -r -S child
==> on-screen-doit <==
#!/bin/sh
case "$1"
in
-i|--ask)
shift
echo -n "Execute '$@' ([y]/n)?"
read ans garbage
case "$ans"
in
n|N|[nN][oO])
screen -S parent -X remove
exit 1 ;;
esac
;;
esac
"$@"
screen -S parent -X remove
exit 0
あとは,2の前に「parentが上がっていなければデバッガを起動せず,スクリ
プトをそのまま実行」というチェックを入れれば良いのでは.
前田敦司
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735