2017-04-03 73 views
0

我用C寫langage包含這些行的程序:執行shell程序與execv

void main(int argc, char *argv[]) { 
    char* file=argv[1]; 
    char* arguments[] = { "sh", argv[2], argv[3], argv[4], file, NULL }; 
    execv("/bin/sh", arguments); 
} 

文件是prog.sh包含的參數的簡單相加:

expr $1 + $2 + $3 

當我通過./main prog.sh 1 2 3運行程序我獲得誤差是

/bin/sh: 0: Can't open 1 

雖然我預計輸出6(1 2 3總和)

+0

您是否已編譯此代碼?進入'expr'可執行文件。它看起來非常尷尬。你有一個shell腳本,調用一個正在調用shell腳本的可執行文件,調用可執行文件...它不會和平地結束。 –

+0

當我運行(sh prog.sh 1 2 3)從終端它的作品。不,我只是一個C程序調用shell腳本:) – Mehdi

+0

什麼是'main'? –

回答

2

看看你的論點:

char* arguments[] = { "sh", argv[2],argv[3],argv[4],file, NULL }; 

當您運行./main prog.sh 1 2 3,你最終調用:

sh 1 2 3 prog.sh 

而應該使腳本第一個參數:

char* arguments[] = { "sh", file, argv[2],argv[3],argv[4], NULL }; 

從而調用

sh prog.sh 1 2 3 
+0

它的工作原理。非常感謝 ! – Mehdi

+0

我想知道爲什麼''sh'''後面不需要''-c「'。花了一些時間試着讓它與''-c「'一起工作。 –

+1

@VictorSergienko'-c'用於當您想要評估字符串中的shell代碼時。如果你想評估一個文件中的shell代碼(又名腳本),請不要使用它 –