[vine-users:082535] Re: Vine 6.2、bc-1.06.95-1vl6の不正出力について

長南洋一 cyoichi @ maple.ocn.ne.jp
2014年 4月 9日 (水) 22:11:22 JST


長南です。

以下は憶測ですけれど。

紹介した二番目の記事にこんなことが書いてあります。

  ・ Your operating system’s readline library sometimes emits 
     a ^[[?1034h escape code to switch on 8bit character display 
     when initialized.

あるいは、あらいさんの

>  ゴミはインタラクティブに起動させたためにターミナルに制御コードを送っ
> たように思われますし

というご意見が正しいのかもしれません。つまり、"^[[?1034h" は
i オプションを付けたために bc が出しているのかもしれない。readline
ではなく。

いづれにしろ、もう一度二番目の Web の記事を引くと、

  ・ One of the things needed for the problem to occur: your TERM 
     environment variable must be set to xterm. Either linux or 
     vt100 is fine ...

問題が起きる場合をもう少し厳密に言うと、環境変数 TERM が指している
端末の terminfo で smm=\E[?1034h が指定されている場合ということに
なると思います。その場合に、それが readline であれ、bc であれ、
ある条件で "^[[?1034h" を出力するのではないか。

というわけで、

> でも、Vine 6.2の端末(gnome-terminal)からVine 4.2にログインして前掲の
> スクリプトを実行するとエラーにはならないので、端末のせいだけではない
> ようには思います。

これは、スクリプト中で実行されているのが、Vine 4.2 の bc であり、
その bc は (あるいは readline は) Vine 4.2 の xterm の terminfo を
参照するからではないでしょうか。Vine 4.2 の xterm の terminfo には、
smm=\E[?1034h の指定がありません。

当方で試してみましたが、紹介した記事に出ている二つの対策は、どちらも
有効でした。つまり、環境変数 TERM を xterm 以外にしても OK でしたし
(たとえば、スクリプトの二行目に TERM=linux と書くとか)、xterm の
teminfo ファイルをテキストに落とし、smm=\E[?1034h を削除してから 
(三番目の記事では rmm=\E[?1034l も削除しています) バイナリに作り
直しても、スクリプトは問題なく実行できました。

-- 
長南洋一


vine-users メーリングリストの案内