“我如何实施?”;查找“;使用exec系列的命令?

“我如何实施?”;查找“;使用exec系列的命令?,c,linux,C,Linux,我正在尝试实现“查找”-类型f-exec文件{}\;“这个命令是通过使用execvp函数来实现的。如果我在shell中运行这个命令,它会工作得很好。但是当我通过execvp运行这个命令时,它会显示>>查找:“-exec”缺少参数。” 这是我的密码 #include "stdio.h" #include "unistd.h" #include "stdlib.h" int main() { char *argv[]={"find", ".", "-type","f","-exec", "

我正在尝试实现“查找”-类型f-exec文件{}\;“这个命令是通过使用execvp函数来实现的。如果我在shell中运行这个命令,它会工作得很好。但是当我通过execvp运行这个命令时,它会显示>>查找:“-exec”缺少参数。”

这是我的密码

#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"

int main()
{
    char *argv[]={"find", ".", "-type","f","-exec", "file", "{}", "\\;",NULL};
    execvp(argv[0],argv);
}

转义规则可能很棘手,特别是当涉及多个级别或不同的上下文时:)

“\\;“
unescape to
”\;“
find
希望其
-exec
参数被
终止;
,因此您需要传递
”;“
直接

为什么不
“\\;“
您可能会问?因为
在shell中有特殊含义。您需要在shell中转义它,因为它的特殊含义需要被忽略,并且让shell使用文本
调用命令。当使用
execvp
时,没有涉及shell,因此不需要转义字符并传递动词阿蒂姆

#包括“stdio.h”
#包括“unistd.h”
#包括“stdlib.h”
int main()
{
char*argv[]={“find”、“,”-type”、“f”、“-exec”、“file”、“{}”、“;”、NULL};
execvp(argv[0],argv);
}
如果希望在shell中出现相同(错误)行为和此错误消息,则需要双重转义exec终止符:

find.-type f-exec文件{}\\\;

find.-type f-exec文件{}\;'