2014-03-07 34 views
3

我想用execl()來啓動一個沒有執行權限的腳本。當從命令行完成的,這工作得很好:從execl運行腳本()

[[email protected] playground]$ /bin/sh test.sh 
I run ! 

然而,當我想用​​在C execl,它只是啓動另一個shell,而不運行我的腳本。

int main(int argc, char **argv) { 
    execl("/bin/sh", "/home/bf/playground/test.sh", NULL);  
    return 0; 
} 

我不能僅僅運行腳本,因爲我不能保證腳本是可執行的(它在嵌入式設備上,用FTP腳本加載)。

回答

4

嘗試

execl("/bin/sh", "sh", "/home/bf/playground/test.sh", (char *) NULL); 
/* exec*()-functions do not return on success, so we only get here in case of error. */ 
perror("execl() failed"); 

man 3 exec

這些函數的初始參數是一個文件的名稱是 要執行。在EXECL

的常量字符* Arg和隨後的省略號()execlp(), 和execle()函數可以被認爲是爲arg0,ARG1,...,ARGN

arg0相當於arg[0]這是該程序的名稱。一個程序的參數是arg[1]


同時請注意(的進一步下跌exec*()'s man-page):

的 參數列表必須以空指針被終止,並且,因爲這些都是 可變參數函數,這個指針必須強制轉換(char *)NULL