命令行解释器,每行有多个命令

时间:2017-02-26 10:04:14

标签: c shell command line interpreter

我想编写一个comamnd行intepreter,每行有多个命令。

我在C中写了一个程序,每行1个comamnd,但如果我输入更多命令不工作,comamnds输入如:ls -l; pwd;猫文件; LS。

首先我解析了args,我将它们放入数组中,我有这个功能:

pid_t pid;
pid = fork();    

switch(pid) {
    case -1:  
      printf("DEBUG:Fork Failure\n");
      exit(-1);
    case  0:
      execvp(cmd[j], cmd);

      if(execvp(cmd[j], cmd) == -1) {
            printf("Command Not Found\n");
            exit(0);
      }

    default:  
    wait(NULL);
    printf("DEBUG:Child Finished\n");
}

我的解析器是:

printf("shell> ");

fgets (input, MAX_SIZE, stdin);

if ((strlen(input)>0) && (input[strlen (input) - 1] == '\n')) {
    input[strlen (input) - 1] = '\0';
}


printf("INPUT: %s\n", input);

cnd = strtok(input, " ;");

int i = 0;

while(cnd != NULL) {    
    cmd[i] = cnd;
    i++;
    cnd = strtok(NULL, ";");

我认为我必须使用烟斗来解决我的问题,但是如何? 有什么想法吗?

抱歉英语不好

1 个答案:

答案 0 :(得分:0)

你解释它的方式,似乎是你想要一个接一个地执行命令,但是没有让它们相互通信(此外,将ls的输出汇总到{{1}只是毫无意义)。

为此,解决方案很简单:在分号上拆分输入,并处理每个命令,因为它是一个命令(因为它就是这样)。

使用一些伪代码,它可能看起来像这样

pwd

您可以使用例如input = read_next_line(); while ((next_command = get_next_command(input)) != NULL) { execute_command(next_command); } 或类似的功能。