我感兴趣的是,如何用C中的execvp完成内联linux扩展。 我尝试在一个表示内部的反斜杠撇号表示,以下是一个字符串,但失败了。我运行的代码如下:
static const char *datecmd[] = { "xsetroot", "-name", "$(date +'%T')", NULL };
execvp(((char **)arg->v)[0], (char **)arg->v);
答案 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
进程(并且您可以避免任何通配)