我遇到了ffmpeg的./configure
脚本问题。我的linux环境使用busybox,它只允许有限的linux命令集。在ffmpeg ./configure
脚本中使用的一个命令是mktemp -u
,这里的问题是linux的busybox无法将-u开关识别为有效,因此它会抱怨它并中断配置过程。
这是./configure
中使用mktemp -u
命令的相关代码:
if ! check_cmd type mktemp; then
# simple replacement for missing mktemp
# NOT SAFE FOR GENERAL USE
mktemp(){
echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
}
fi
tmpfile(){
tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
(set -C; exec > $tmp) 2>/dev/null ||
die "Unable to create temporary file in $TMPDIR."
append TMPFILES $tmp
eval $1=$tmp
}
我根本不熟悉bash脚本,所以我想知道是否有人知道我如何强制这个配置脚本不使用mktemp -u
并使用'替换'根据上面的代码段提供的替代选项。感谢。
btw ...只是删除-u
开关不起作用。也不会将其替换为-t
或-p
。我认为mktemp
必须完全被绕过。
答案 0 :(得分:2)
改变这个:
if ! check_cmd type mktemp; then
# simple replacement for missing mktemp
# NOT SAFE FOR GENERAL USE
mktemp(){
echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
}
fi
对此:
#if ! check_cmd type mktemp; then
if true; then # Force the use of mktemp()
# simple replacement for missing mktemp
# NOT SAFE FOR GENERAL USE
mktemp(){
echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
}
fi
您也可以删除整个if
fi
结构,这样剩下的只是mktemp()
定义,但我宁愿留下它们以便记住需要的内容完成后如果你需要回去。
答案 1 :(得分:1)
我只是更改配置脚本以将-u
选项删除到 mktemp 并删除set -C;
(设置no-clobber模式,并要求文件为缺席;删除-u
表示您还需要删除set -C
。
mktemp(1)的MacOS X手册页说:
-u
在“不安全”模式下操作。在mktemp退出之前,临时文件将被取消链接。这比mktemp(3)略好,但仍然引入了竞争条件。用于 不鼓励这个选项。
生成的文件名由mktemp取消链接,然后立即由configure脚本重新创建,这有点愚蠢。删除-u
意味着文件名已经存在,已经安全创建。
如果软件是您经常使用的软件,请将问题报告给软件开发人员或维护人员。