我想使用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脚本)。
答案 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");
这些函数的初始参数是文件的名称 将被执行。
execl(), execlp()中的const char * arg和后续省略号, 和 execle()函数可以被认为是 arg0,arg1,...,argn 。
arg0
相当于arg[0]
这是程序的名称。程序的1 st 参数是arg[1]
。
另请注意(exec*()
's man-page下方):
列表 参数必须由空指针终止,因为它们是 可变参数函数,必须将此指针强制转换为(char *)NULL 。