我正在创建一个小的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: `''
答案 0 :(得分:1)
摆脱s///
参数周围的单引号。这些是shell语法的一部分,而不是sed
语法。
char *argv[] = { "/usr/bin/sed", "-e", "s/Roses/Turnips/", 0 };
execve
直接执行程序,它不使用shell。每个参数都是字面上发送给程序的,因此在shell中运行程序时不需要转义或引用。
答案 1 :(得分:0)
问题出现在sed
内部,因为它不需要你的单引号。
您在shell中使用这些单引号来阻止它解释sed命令,但shell最终会删除这些引号,这也是您需要做的。