2016-12-17 106 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最終會刪除這些引號,這也是您需要執行的操作。