如何使用execvp进行内联扩展

时间:2015-02-02 17:40:20

标签: c linux execvp

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

您似乎对globbing感兴趣,请参阅glob(7)。 然后,您还可以使用wordexp(3)扩展您的内容,然后在结果上调用execvp(3)

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