[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