[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 メーリングリストの案内