我正在实现"find .-键入 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);
}
转义规则可能很棘手,尤其是在涉及多个级别或不同上下文的情况下:)
"\;"
逃脱";"
.find
希望它的-exec
参数被;
终止,所以你需要直接传递";"
。
为什么不"\;"
你可能会问?因为;
在贝壳中有着特殊的意义。您需要在 shell 中对其进行转义,因为它的特殊含义需要忽略,并让 shell 使用文字;
调用命令。使用execvp
时,不涉及 shell,因此您无需转义字符并逐字传递。
#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"
int main()
{
char *argv[]={"find", ".", "-type","f","-exec", "file", "{}", ";",NULL};
execvp(argv[0],argv);
}
如果您希望在 shell 中出现相同的(错误(行为和此错误消息,则需要对 exec 终止符进行双重转义:
find . -type f -exec file {} \;
或
find . -type f -exec file {} ';'