gpt4 book ai didi

c - 如何使用 exec-family 实现 "find"命令?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:14 28 4
gpt4 key购买 nike

我正在尝试实现“”查找。 -type f -exec file {}\;"这个命令使用 execvp 函数。如果我在 shell 中运行它,它运行良好。但是当我通过 execvp 运行它时,它一直说 >>find: missing argument to `-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 args 被 ; 终止,所以你需要直接传递 ";"

为什么不 "\\;" 您可能会问?因为 ; 在 shell 中有特殊的含义。您需要在 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 {} '\;'

关于c - 如何使用 exec-family 实现 "find"命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58334578/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com