微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在autoconf中,如何创建临时文件并测试shell命令?

如何解决在autoconf中,如何创建临时文件并测试shell命令?

在我的configure.ac中,我想创建一个临时文件一个Makefile)并执行一些操作(make)。要验证某些包含物中的某些已定义变量(在这里无关紧要)。

我当然可以创建/ tmp / Makefile,cd / tmp,make等...但是我需要清理,创建一个随机的子文件夹,以免覆盖那里的Makefile等。

但是没有AC_TRY_COMPILE之类的东西吗?但是不尝试编译,而是运行一些东西。显然AC_TRY _ ***嵌入了一种创建临时文件,将其删除方法,等等。我看到了参考$ ac_tmp或$ tmp,但是没有正确替换。

解决方法

在我的configure.ac中,我想创建一个临时文件(一个Makefile), 并执行一些(make)。验证一些定义的变量 包括在内(在这里无关紧要)。

make需要参与其中,这对我来说似乎非常可疑,但我将以面值考虑。

我当然可以创建/ tmp / Makefile,cd / tmp,make等...但是我需要 清理,可能创建一个随机的子文件夹,所以我不会覆盖 Makefile在那里,等等。

细节仍然听起来很可疑....

但是没有AC_TRY_COMPILE之类的东西吗?但不要试图 编译,而是运行一些东西。显然AC_TRY _ ***嵌入了一种方式 创建一个临时文件,将其删除,等等。我看到了参考$ ac_tmp或 $ tmp,但是无法正确替换。

否,Autoconf没有用于运行任意shell命令的内置的,面向用户的宏。为什么会这样?通常,只需将命令按字面意义写到Autoconf输入中即可。有AC_RUN_IFELSE,但它的用途比您描述的还要专门:不要运行任意命令,而是将提供的源代码编译到程序中并运行 that

但是您的关注点似乎在这里滑落。您开始询问有关创建临时文件的信息,现在转到了运行命令。两者没有紧密联系。特别是,是的,Autoconf configure脚本的确会结合执行某些执行特定命令的测试来创建和删除临时文件,但是它们使用预定义的(合理的)众所周知的名称,但它们没有听起来可以满足您的目的。

另一方面,Section 11.15 of the Autoconf manual,“常用工具的局限性”在讨论mktemp命令时,恰好解决了您对临时文件和目录的疑问:

Shell脚本可以与mktemp安全地使用临时文件,但是确实可以 并非在所有系统上都存在。一种创建安全临时文件的便携式方法 文件名是使用模式700创建一个临时目录并使用 文件放在此目录中。两种方法都可以防止攻击者 获得控制权,尽管mktemp失败失败的可能性要小得多 受到攻击。

以下是示例代码,用于安全地创建新的临时目录“ $ dir”:

    # Create a temporary directory $dir in $TMPDIR (default /tmp).
    # Use mktemp if possible; otherwise fall back on mkdir,# with $RANDOM to make collisions less likely.
    : "${TMPDIR:=/tmp}"
    {
      dir=`
       (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
      ` &&
      test -d "$dir"
    } || {
      dir=$TMPDIR/foo$$-$RANDOM
    
      (umask 077 && mkdir "$dir")
    } || exit $?

如果您想要一个简单的“否”关于内置宏的更多信息,那么如果已经有内置宏的话,手册不太可能会费心讨论细节为你。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。