[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:09251] Re: csh to sh script



> よくわからないのは \$i:r.tex のような処理をどうするかと
> 後で上で作った _cut.sh を実行するのですがそのときに
> foreach i ( TBL*.p PIC*.p ) を for i in TBL*.p PIC*.p
> にすると TBL*.p だけで PIC*.p がないときなどに PIC*.p の
> 処理もしようとして変になることです。

前者は、basenameを使うのがまっとうだと思いますが、bashを仮定
してよいなら`$i:r.tex -> ${i/%.p/tex}としてもよいと思います。

後者は、bashを仮定してよいなら、shopt -s nullglobとしておく
と、*が展開できないとき、cshと同じようにヌル文字列が返されま
す。本物のshなら…-fを使って存在を確認するのかな。

あと、_tmp.pnmみたいな名前は決め打ちしない方がいいと思います。
_tmp.pnmの置き場所が、作業用に作った一時ディレクトリならいい
のですが、そうでないなら、万が一ユーザがその名前でファイルを
置いていたら困りますから。

以下のような感じになるのでは? (テストしていません)

tmpscript=`tempfile`
cat << 'END_TEX_CUT' >> $tmpscript
tmppnm=`tempfile`
shopt -s nullglob
for i in TBL*.p PIC*.p; do
    echo "Part $i process"
    base=${i/%.p/}
    plain2 -tex -jis -tstyle=pt2empty $i > $base.tex
    jlatex $base.tex
    dvi2ps $base.dvi > $base.ps
    convert -density 144x144 $base.ps $base.pnm
    pnmcrop -white $base.pnm > $tmppnm
    convert $tmppnm $base.gif
    for j in ps dvi aux log tex p pnm; do
        rm -f $base.$j
    done
    rm -f $tmppnm
done
END_TEX_CUT