星期日, 4月 05, 2009

mktemp

有時候shell script 會需要用一些暫存檔, 有些可以透過piping 完成. 像是這個:
elinks -dump 1 kill.html | perl -ne 'print "$1\n" if /\d+\. (http:\/\/.*)\b/'
這也可以寫成
elinks -dump 1 test.html > tmp
perl -ne 'print "$1\n" if /\d+\. (http:\/\/.*)\b/' tmp
rm -f tmp
前題是 tmp 沒有其他的用途,不然一直行這個script 以後 tmp 就不見了。
有時候沒辦法純粹用 piping 達成(或是不方便,寫起來很醜),這時候mktemp 就很有用了,他可以產生一個隨機的檔名,建立並把檔名輸出到stdout 供script 用。下面有個例子:
TMPFILE=`mktemp -t urltemp.XXXXXXXXXX` && {
echo $TMPFILE is created
elinks -dump 1 test.html > $TMPFILE
perl -ne 'print "$1\n" if /\d+\. (http:\/\/.*)\b/' $TMPFILE
rm -vf $TMPFILE
}
其中XXXXXXXXXX 是參數讓 mktemp 可以填入隨機檔名。