从execl()运行脚本

时间:2014-03-07 12:57:30

标签: c exec

我想使用execl()来启动没有执行权限的脚本。从命令行完成后,这很好用:

[bf@bf-laptop-tbwb 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脚本)。

1 个答案:

答案 0 :(得分:6)

尝试

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() execlp()中的const char * arg和后续省略号,          和 execle()函数可以被认为是 arg0,arg1,...,argn

arg0相当于arg[0]这是程序的名称。程序的1 st 参数是arg[1]


另请注意(exec*()'s man-page下方):

  

列表          参数必须由空指针终止,因为它们是          可变参数函数,必须将此指针强制转换为(char *)NULL