1

我遇到./configure了 ffmpeg 脚本的问题。我的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和使用上面代码段中可用的“替换”替代选项。谢谢。

顺便说一句......简单地移除-u开关是行不通的。-t也不用, 或替换它-p。我相信mktemp必须完全绕过。

4

2 回答 2

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()定义,但我宁愿将它们保留下来,以便记住需要完成的操作,以防您需要返回。

于 2011-01-03T03:29:30.100 回答
1

我只需更改配置脚本以将-u选项删除到mktemp并删除set -C;(它设置 no-clobber 模式,并要求文件不存在;删除-u意味着您也需要删除set -C)。

mktemp(1)的 MacOS X 手册页说:

-u 在“不安全”模式下运行。在 mktemp 退出之前,临时文件将被取消链接。这比 mktemp(3) 稍微好一点,但仍然引入了竞争条件。不鼓励使用此选项。

生成的文件名被mktemp解开,然后立即通过configure脚本重新创建,有点傻。删除-u意味着文件名已经存在,并且已经安全地创建。

如果该软件是您要经常使用的软件,请将问题报告给该软件的开发人员或维护人员。

于 2011-01-03T03:44:56.330 回答