正如标题所说,我有一个字符串,其中包含由输入给出的bash命令(例如,command =“ls -l”),我需要从C程序执行它。 我知道我可以简单地使用系统(命令),但这是一个学校练习,我不能使用系统,也不能使用popen。 我想过使用exec *,但是需要解析字符串以分离命令和各种参数。 是否有一个系统调用(不是系统),它允许我简单地执行带有参数的命令而不必将它们分开? 提前感谢您的答案:)
答案 0 :(得分:5)
这是一种在不解析命令及其各种参数的情况下执行命令的方法:
execl("/bin/sh", "/bin/sh", "-c", "your-command-without-parsing", 0);
答案 1 :(得分:4)
首先,那不是" bash"命令。 bash是一个shell,但你有一个程序命令行。
您应该查看系统调用
为了让您先行一步,您可以在不调用system(…)
的情况下从程序中启动shell:
pid_t spawnshell(void)
{
char *argv[]={"/bin/sh", 0};
char *envp[]={0};
pid_t shpid = fork();
if(!shpid) {
execve(argv[0], argv, envp);
perror("execve");
assert(0 && "execve failed");
_exit(-1);
}
return shpid;
}