2016-12-17 5 views
-1

私は小さなUNIXシェルを作成していますが、execveにはsedという問題があります。 sed -e 's/Roses/Turnips/'を実行すると、コマンドはexecveで失敗します。sedで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

一重引用符をエスケープしようとしましたか? – t0mm13b

答えて

1

s///引数の周りの単一引用符を取り除きます。それらはシェル構文の一部であり、sed構文ではありません。

execveは、直接プログラムを実行しますが、シェルを使用しません。すべての引数は文字通りプログラムに送られるので、シェルでプログラムを実行するときと同じようにエスケープやクォートは必要ありません。

+0

とexecveはシェルを実行しません。 –

0

この問題はsedの中で発生します。シングルクォートを必要としないからです。 これらの一重引用符をシェルで使用してsedコマンドを解釈しないようにしますが、シェルは最終的にそれらの引用符も削除します。

関連する問題