我正在编写一个shell脚本,我需要创建一个具有特定扩展名的临时文件.
我试过了
tempname=`basename $0`
TMPPS=`mktemp /tmp/${tempname}.XXXXXX.ps` || exit 1
Run Code Online (Sandbox Code Playgroud)
和
tempname=`basename $0`
TMPPS=`mktemp -t ${tempname}` || exit 1
Run Code Online (Sandbox Code Playgroud)
不起作用,因为第一个创建文字名称与文字"XXXXXX",第二个不提供扩展选项.
我需要扩展名,以便预览不会拒绝打开文件.
编辑:我最终使用pid和mktemp的组合,我希望是安全的:
tempname=`basename $0`
TMPTMP=`mktemp -t ${tempname}` || exit 1
TMPPS="$TMPTMP.$$.ps"
mv $TMPTMP $TMPPS || exit 1
Run Code Online (Sandbox Code Playgroud)
它很容易受到拒绝服务攻击,但我认为没有更严重的问题.
bas*_*ic6 12
最近版本的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
Run Code Online (Sandbox Code Playgroud)
我相信这需要coreutils> = 8左右.
如果您创建一个没有后缀的临时文件(较旧的mktemp版本)并且您将其重命名为附加一个,那么您可能做的最少的事情就是检查该文件是否已存在.它不能保护您免受竞争条件的影响,但如果已经有一段时间存在这样的文件,它确实可以保护您.
除了 --suffix (并不总是可用)之外的所有这些解决方案都有竞争条件。您可以通过使用 mktemp -d 创建一个目录,然后将您的文件放在那里来消除竞争条件。
mydir=`mktemp -d`
touch "$mydir"/myfile.ps
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9604 次 |
| 最近记录: |