如何使用 execvp 进行内联扩展

How to use in-line expansion with execvp

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

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

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

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

您似乎对 globbing, see glob(7) 感兴趣。 然后你也可以在它的结果上使用 wordexp(3) to expand your thing, and later call execvp(3)

顺便说一句,对于 date +%T 的特定扩展,您应该阅读 time(7) and simply use a usual combination of time(2), localtime(3), strftime(3)。您不需要 运行 任何 date 进程(并且您可能会避免任何 globbing)