Takahide Nojima <nojima@taito.co.jp> writes:

>   1) 文字端末サーバをtelnet上で立ち上げ待ち受け状態にする。
> 
>   2) 文字端末クライアントの改造を施したインタプリタ系の言語のデバッガ
>      を用意。これがバックグラウンドプロセスで起動する。
>     (perl -d:tkdbのイメージです)
>     
>   3) 1)に2)のプロセスから接続が行われ、デバッガの画面が1)の端末上に現れる。
> 
>    (まるでX端末にリモートのアプリから接続が行われてGUIが出現するような
>      感覚です)

screen -X (起動済みのscreen画面へ外部からコマンドを送る機能) を使うと,
同じようなことができると思うのですが…(いつから入った機能か知りません.
3.09.04には無い機能ですが,3.09.09にはあります.)

セッション名も(screen画面をたくさん立ち上げているとかでなければ) 与え
なくて良いし.与えたければSTY環境変数で与えておけば良いし.

たとえば,下につけるようなシェルスクリプトを使うと,

(1) screenを(telnetでもなんでも文字端末上で)立ち上げ待ち受け状態にする.
(2) on-screen command args... を(バックグラウンドでも何でも)実行すると,
(3) (1)に(2)のプロセスから接続が行なわれ,command の画面が(1)の端末上
に現れる.

わけですが,どのへんが不足なのでしょう?

>     a.attachする為のセッション名をデバッグ作業の時に定める必要がある。
>      (Xの様にDISPLAY=ホスト名:0とかしておけば何とかなる方が楽で良い)
>
>     b.attachする際にいちいちps とってどのプロセス番号かを調べる必要がある。
> 
>     c.attachして終了させるか、killしないとプロセスにscreenがattachされるのを
>      待って居座りつづけてしまう
> 
> など使い勝手が今一なのです。1)の文字端末サーバが上っていなければ
> c.の状態にはならないとかだとさらに安全で良いなあと思っています。

これは screen -r で再attachする場合の話でしょうか.たくさんscreenを立
ち上げていなければ,セッション名やプロセス番号は指定しなくてもかまわな
いと思うんですが. 

===

以下の,on-screenとon-screen-doitという2つのスクリプトをPATH中に置いて
おけば,前述したような使い方ができます.

使用例:

$ nohup on-screen w3m http://www.yahoo.co.jp/ &
(バックグラウンドで起動されるコマンドからw3mブラウザを起動し,起動済み
のscreen画面で表示/制御する.)

$ STY=1234.myhost.pts-1; export STY
$ on-screen emacs
(複数のscreenが立ち上がっている時,片方を選んでon-screenでemacsを表示.)


screen画面の中からもon-screenコマンドは使えます.

==> on-screen <==
#!/bin/sh

screen -X split
screen -X focus
screen -X screen on-screen-doit "$@"

==> 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 -X remove
    exit 1 ;;
  esac
  ;;
esac
"$@"
screen -X remove
exit 0

===
                                前田敦司