Diary over Finite Fields

515ひかるが書き溜めたメモとコラムと雑記

texのタイプセットしたときに出てくる人たちを消去するスクリプト

Cygwinで遊ぶとか言ってましたが, あんまり遊んでません.

それどころか, 昨日はなぜかシェルスクリプトを書いて遊んでいました. むむ.

内容は, texのタイプセット時に出てくるやつらの消去(.tex 及び .pdf以外を)です.
初めてシェルスクリプト書いたし, エラー処理とかしきれていないかもしれない. 使用は自己責任でお願いします.(使う人居ないと思うけれど)

私の環境では, タイプセットのコマンドによっては .syntax.gz ファイルが出てくることもあるので, これもあれば消去するように書いてます.

使い方は, このスクリプトに filename.tex (または, filename.pdf)を引数として渡すと, filename.aux, filename.log, filename.dvi, filename.syntax.gz があれば削除するかどうか聞かれ, なければ何もしないという単純な仕様. 特に .log はtex以外でも登場するのでむやみに消さないように -i オプションをつけています.

#!/bin/sh
# 引数が 0, もしくは2以上ならばエラーメッセージを取得
if [ $# = 1 ]
then
	## 絶対パスを取得する
	path=$1
	dir=$(cd $(dirname $path) && pwd)
	file=$(/usr/bin/basename $path)
	abs_path=$dir/$file
	## ファイル名を取得
	FILENAME_AND_EXT=$dir/${abs_path##*/} #絶対パスと名前と拡張子
	FILENAME=${FILENAME_AND_EXT%.*} #絶対パスと名前のみ
	FILE_EXT=$dir/${FILENAME_AND_EXT##*.} #絶対パスと拡張子のみ
	if [ $FILE_EXT = $dir"/tex" -o $FILE_EXT = $dir"/pdf" ] # 引数が .tex or .pdf のとき
	then
		if [ -e ${FILENAME}.aux ] # .auxファイルがあれば
		then rm -i ${FILENAME}.aux
		fi
		if [ -e ${FILENAME}.log ] 
		then rm -i ${FILENAME}.log
		fi
		if [ -e ${FILENAME}.dvi ] 
		then rm -i ${FILENAME}.dvi 
		fi
		if [ -e ${FILENAME}.synctex.gz ] 
		then rm -i ${FILENAME}.synctex.gz
		fi
	else echo "このスクリプトは, 拡張子が .tex or .pdf のファイルをひとつ指定しないと正しく動きません" "引数が .tex,.pdf以外を指定しているとき
fi
else echo "このスクリプトは, 拡張子が .tex or .pdf のファイルをひとつ指定しないと正しく動きません" # 引数が1つじゃないとき
fi


以下のサイト, ブログを参照(ていうかパクったところもある) しました.

エラーメッセージは趣味です. echo より say させたほうが楽しいかもしれない.

一応絶対パス, 相対パスでの動作は確認済み. カレントディレクトリ以外のファイルを引数にしても動作します.(僕が数回試した限りでは)
たまに遊んだらコードをここに貼っつけるの, 割りと楽しいのかもしれない.