正在尝试实现“”查找。 -type f -exec file {} \ ;;“使用execvp函数执行此命令。如果我在shell中运行它,效果很好。但是当我通过execvp运行它时,它会一直显示>> find:缺少`-exec'的参数
这是我的代码
#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"
int main()
{
char *argv[]={"find", ".", "-type","f","-exec", "file", "{}", "\\;",NULL};
execvp(argv[0],argv);
}
答案 0 :(得分:1)
转义规则可能很棘手,尤其是在涉及多个级别或不同上下文的情况下:)
"\\;"
转义为"\;"
。 find
期望其-exec
args被;
终止,因此您需要直接传递";"
。
您为什么不问"\\;"
?因为;
在shell中有特殊含义。您需要在shell中对其进行转义,因为需要忽略其特殊含义,并使shell用文字;
来调用命令。使用execvp
时,不涉及任何外壳,因此您无需转义字符并将其逐字传递。
#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"
int main()
{
char *argv[]={"find", ".", "-type","f","-exec", "file", "{}", ";",NULL};
execvp(argv[0],argv);
}
如果您想要相同的(错误的)行为,并且此错误消息出现在外壳程序中,则需要两次转义exec终止符:
find . -type f -exec file {} \\\;
或
find . -type f -exec file {} '\;'