我是C语言中的系统编程新手。
我想编写一个程序,一个接一个地执行几个命令。命令由分号分隔。
这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int counter = 0;
pid_t fils;
if (argc == 1){
printf ("USAGE : who ; pwd ; ls -l\n");
exit(1);
}
printf("Number of arguments %d \n",argc);
for(counter=0;counter<argc;counter++){
fils = fork();
if (fils <0){
perror("Error fork! ");
exit(1);
}
if(fils == 0){
printf ("Execution of command %d %s \n",counter+1,argv[counter+1]);
sleep(2);
execvp(argv[counter+1],argv+counter+1);
}
wait(NULL);
}
return 0;
}
例如,我的文件名是myProgram,我希望执行的命令列表是:who ; pwd ; ls -l
所以,当我输入:./myProgram who ; pwd ; ls -l
我注意到我的程序只考虑了2个参数,因此它不考虑分号。它将文件的名称作为第一个参数,其余作为第二个参数。
如何修改我的代码,以便它可以将分号后面的每个命令视为它自己的单独命令。
提前谢谢
答案 0 :(得分:1)
当您键入./myProgram who ; pwd ; ls -l
时,shell会将其解释为:
./myProgram who
pwd
ls -l
但是您希望将所有who ; pwd ; ls -l
作为参数发送到单个./myProgram
命令,因此您需要告诉shell不要将;
解释为它自己的分隔符,就像这样{ {1}}。特殊字符./myProgram who \; pwd \; ls -l
用于告诉shell不要解释下面的字符,而是按原样使用。