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

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


長南です。

よしのぶさんのメールより [vine-users:082526]
>
> Vine 4.2(bc-1.06-18vl3)上で作成した数値計算のシェルスクリプトを
> Vine 6.2(bc-1.06.95-1vl6)で動かしてみたところ、まともに動きません。
> いろいろ調べてみたところbcの出力にゴミがついているようです。
> 
> 下記のスクリプトで計算させるとbashの算術展開とbcの計算結果は、echoの
> 出力上は同一(真)に見えますが、bcの出力には
> 5b1b 313f 3330 6834 (0x1B[?1034h)
> が前置されているため、testはBAD(偽)になってしまいます。...

> $ ./bc_err.sh 27 "*" 3 
> 81 = 81
>  3138
>  5b1b 313f 3330 6834 3138
> BAD
> 
> #!/bin/sh
> r1=$(($1 $2 $3))
> r2=`echo -n "$1 $2 $3" |bc  -iq`
> echo  $r1 = $r2
> echo -n $r1 |od -h -A n
> echo -n $r2 |od -h -A n
> if [ "$r1" = "$r2" ];then
>     echo O.K.
> else
>     echo BAD
> fi

興味深い話なので、Google で 1034h を調べてみました。
こんな記事が見つかりました。

  http://www.incenp.org/notes/2012/python-term-smm-fix.html
  http://reinout.vanrees.org/weblog/2009/08/14/readline-invisible-character-hack.html
  http://teckmemo.seesaa.net/archives/201302-1.html

> で、このゴミの原因なのですが、bcだけの問題ではなく、実行する端末も
> 関係するようで、下記スクリプトをVine 6.2のConsole上で実行すると、
> 前置のゴミは付加されず、BAD(偽)になりません(Vine 6.2のX上の端末、
> gnome-terminal, xterm, uxtermなどではBAD(偽)になります)。

Vine 6.2 と Vine 4.2 の xterm で比較してみました。
Vine 6.2 ではこんなふうになります。

  $ infocmp xterm |grep 1034h
      smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m, 

Vine 4.2 では smm の項がありません

  $ infocmp xterm |grep 1034h
  $

それで、4.2 では使えたものが、6.2 で使えなくなったのですね。

xterm の terminfo から、smm を削除するのは、何か副作用があるのでしょうか。

-- 
長南洋一


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