我曾经读过一种在外壳中为临时文件获取唯一文件名的方法是使用双美元符号($$)。这确实会产生不时变化的数字...但是,如果您反复调用它,它将返回相同的数字。(解决方案是只使用时间。)我很好奇到底$$是什么,为什么会建议将其作为生成唯一文件名的一种方式。
3 回答
绝地无双
TA贡献1946条经验 获得超4个赞
$$是bash中的进程ID(PID)。使用$$是个坏主意,因为它通常会创建竞争条件,并允许攻击者破坏您的shell脚本。见,例如,所有这些人谁创建不安全的临时文件,并不得不发布安全公告。
而是使用mktemp。mktemp的Linux手册页非常棒。以下是其中的一些示例代码:
tempfoo=`basename $0`
TMPFILE=`mktemp -t ${tempfoo}` || exit 1
echo "program output" >> $TMPFILE
添加回答
举报
0/150
提交
取消