我正在尝试将参数(例如:ls,date,cal)发送到新shell,执行这些参数并终止。
#include"header.h" //includes all the header files
int main(int argc,char * argv[],char *envp[]) {
char *ap[]={"sh","ls",NULL};
int p=execve("/bin/sh",ap,envp);
printf("error:%d",p);
perror("execve");
}
输出:
sh:0:can't open ls
答案 0 :(得分:4)
这与execve
无关。您的程序正确调用sh ls
。
只是sh
将其第一个参数解释为要运行的shell脚本的名称,但当前目录中没有名为ls
的文件,因此出现错误。通过手动运行sh ls
,您将获得相同的结果。
如果您只想运行ls
,为什么要通过shell呢?只是做:
char *ap[]={"ls",NULL};
int p=execve("/usr/bin/ls",ap,envp);
另一方面,如果你想使用shell,你需要告诉它它的参数应该是一个命令,而不是一个文件的名称。您可以使用sh -c ls
执行此操作:
char *ap[]={"sh","-c","ls",NULL};