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

yoshino @ rita.karing.jp yoshino @ rita.karing.jp
2014年 4月 8日 (火) 19:44:20 JST


こんにちは、よしのぶと申します。

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(偽)になってしまいます。先頭の1b以外
はASCIIなのに見えないのはISO-2022-{CN,JP,KR}のエスケープシーケンスか
なにかと勘違いしてるのか?とも思ったのですが、該当するようなものは
ないようです。

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

-- 
よしのぶ
yoshino @ rita.karing.jp


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