我正在创建一个小型 unix shell,execve 在 sed
方面存在问题。当我执行 sed -e 's/Roses/Turnips/' 时,命令失败并显示 execve。
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main(int ac, char **av, char **envp)
{
char *argv[] = { "/usr/bin/sed", "-e", "'s/Roses/Turnips/'", 0 };
execve(argv[0], &argv[0], envp);
fprintf(stderr, "Failed!\n");
return -1;
}
错误:
/usr/bin/sed: -e expression #1, char 1: unknown command: `''
最佳答案
去掉 s///
参数周围的单引号。这些是 shell 语法的一部分,而不是 sed
语法。
char *argv[] = { "/usr/bin/sed", "-e", "s/Roses/Turnips/", 0 };
execve
直接执行程序,不使用 shell。每个参数都按字面意思发送到程序,因此在 shell 中运行程序时不需要转义或引用。
关于c - sed 执行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41194252/