2010-03-10 119 views
11

我正在写一个shell脚本,我需要创建具有特定扩展名的临时文件。如何在bash中创建具有特定扩展名的临时文件?

我已经试过

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 

它很容易受到服务攻击的拒绝,但我不认为有什么更严重。

回答

9

最近mktemp的报价--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的版本),而后缀,你改名,要追加一个,你可能可以做的是检查,如果该文件已经存在最少的事情。它不能保护你免受比赛的影响,但是如果已经存在一段时间的文件,它会保护你。

+1

FYI:* BSD * mktemp的在Mac OSX上确实有这个选项,至少不是在10.11。 – Jokester 2016-06-08 02:18:34

+1

@ Jokester的名字不是谎言。由此我的意思是OSX/macOS不支持'--suffix',仍然是10.12。 – 2017-04-27 23:06:10

+0

@CharlieGorichanaz我的不好。猜猜我是想写“没有这个选项”,因为我还记得我调试脚本OSX这种差异:( – Jokester 2017-04-28 02:39:08

3

这个怎么样:

echo $(mktemp $TMPDIR/$(uuidgen).txt) 
1

MacOS的塞拉利昂10.12没有--suffix选项,所以我建议解决方法:

tempname=`basename $0` 
    TMPPS_PREFIX=$(mktemp "${TMPDIR:-/tmp/}${tempname}.XXXXXX") 
    TMPPS=$(mktemp "${TMPPS_PREFIX}.ps") 
    rm ${TMPPS_PREFIX} 
    echo "Your temp file: ${TMPPS}" 
相关问题