osx – 如何在bash中创建一个特定扩展名的临时文件?

我正在写一个 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版本),并且您正在重命名以附加一个文件,则可以做的最少的事情是检查文件是否已经存在.它不会保护你免受竞争条件的伤害,但如果已经存在一段时间的文件,它会保护你.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...