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が上がっていなければデバッガを起動せず,スクリ
プトをそのまま実行」というチェックを入れれば良いのでは.

                                前田敦司