2016-12-17 102 views
-1

我创建了一个小的unix shell,execve与sed有个问题。当我执行sed -e 's/Roses/Turnips/'命令失败与execve。execve与sed失败

#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

您是否试过转义单引号? – t0mm13b

回答

1

摆脱围绕s///参数的单引号。这些是shell语法的一部分,而不是sed语法。

char *argv[] = { "/usr/bin/sed", "-e", "s/Roses/Turnips/", 0 }; 

execve直接执行程序,它不使用shell。每个参数都直接发送到程序中,因此在shell中运行程序时不需要转义或引用。

+0

并且execve不执行一个shell。 –

0

这个问题出现在sed里面,因为它不需要你的单引号。 您可以在shell中使用这些单引号来防止解释sed命令,但shell最终会删除这些引号,这也是您需要执行的操作。