我正在写一个
shell脚本,我需要创建一个具有一定扩展名的临时文件.
我试过了
tempname=`basename $0` TMPPS=`mktemp /tmp/${tempname}.XXXXXX.ps` || exit 1
和
tempname=`basename $0` TMPPS=`mktemp -t ${tempname}` || exit 1
既不起作用,因为第一个创建一个带有文字“XXXXXX”的文件名,第二个不给扩展名选项.
我需要扩展名,以便预览不会拒绝打开该文件.
编辑:我结束了pid和mktemp的组合,我希望是安全的:
tempname=`basename $0` TMPTMP=`mktemp -t ${tempname}` || exit 1 TMPPS="$TMPTMP.$$.ps" mv $TMPTMP $TMPPS || exit 1
它容易受到拒绝服务攻击,但我不认为更严重.
最新版本的mktemp offer –suffix:
--suffix=SUFF append SUFF to TEMPLATE. SUFF must not contain slash. This option is implied if TEMPLATE does not end in X. $mktemp /tmp/banana.XXXXXXXXXXXXXXXXXXXXXXX.mp3 /tmp/banana.gZHvMJfDHc2CTilINNuq2P0.mp3
我相信这需要coreutils> = 8左右.
如果您创建一个没有后缀的临时文件(较旧的mktemp版本),并且您正在重命名以附加一个文件,则可以做的最少的事情是检查文件是否已经存在.它不会保护你免受竞争条件的伤害,但如果已经存在一段时间的文件,它会保护你.