【问题标题】:How to use in-line expansion with execvp如何使用 execvp 进行内联扩展
【发布时间】:2015-04-01 17:46:10
【问题描述】:

我感兴趣的是,如何在 C 中使用 execvp 完成内联 linux 扩展。 我尝试在指示以下是字符串的反斜杠撇号中这样做,但失败了。我运行的代码如下:

static const char *datecmd[] = { "xsetroot", "-name", "$(date +'%T')", NULL };
execvp(((char **)arg->v)[0], (char **)arg->v);

【问题讨论】:

    标签: c linux execvp


    【解决方案1】:

    内联扩展是 shell 的一项功能,因此您需要从 shell 内部运行命令,例如:

    static const char *datecmd[] = { "bash", "-c",
                                     "xsetroot -name $(date +'%T')", NULL };
    execvp(((char **)arg->v)[0], (char **)arg->v);
    

    【讨论】:

      【解决方案2】:

      您似乎对globbing 感兴趣,请参阅glob(7)。 然后你也可以使用wordexp(3) 来扩展你的东西,然后在它的结果上调用execvp(3)

      顺便说一句,对于date +%T 的特定扩展,您应该阅读time(7) 并简单地使用time(2)localtime(3)strftime(3) 的常用组合。您不需要运行任何date 进程(并且您可能会避免任何通配)

      【讨论】:

        猜你喜欢
        • 2020-04-22
        • 2013-11-19
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 2012-02-28
        • 1970-01-01
        • 2011-09-13
        • 2016-05-17
        相关资源
        最近更新 更多