作者: Zazel
日時: 2002/4/03(17:41)
=== Kazuhiko Deguchi <deguchi@...> さんが書かれた
=== <20020403135943.5D11.DEGUCHI@...> にて

> CVSの"commit"コマンドをPerlのWrapperスクリプト経由で動かしています。
> コマンドを実行するときに、パイプを作ってコマンドを実行します。
> CVSが標準出力に表示するメッセージをパイプ経由で読み込み、
> このWrapperスクリプトのメッセージとして出力しようとしています。

$|=1していないのがちょっと気になりますが、それよりCVSを起動する
時の標準出力がttyではないので、viがttyのコントロールをしようと
してうまくできすに失敗している可能性が高いと思います。

だとすれば、ptyで連結して実行しなければいけないでしょう。Perl5
ならばIO::Ptyです。でもきっとrawモードあたりを触るため、それを
Perl側で継承してあげなければならないので、面倒です。

そこでviの替わりにPerl側と通信するようなものを動かすようにして
おいて、Perl側で改めてviをsystem()等で動かすのはどうでしょう。
CVSの入出力はPerl側でフックしている(できる)ので、こちらの方が
簡単かもしれません。

以上の内容は予想でしかないので、外していたらごめんなさいです。

(* SEKI Masatoshi  /  zazel@..."jp"         *)
(*  Would you hold my hand? Softly, let's linger. *)