';'输入中的字符被误解了

时间:2017-01-14 07:46:57

标签: c shell

我编写了一个程序来使用';'来分割输入字符串。作为终结符并打印在'之后的字符串部分;'。只要子串跟随&#39 ;;'程序就会显示正确的输出。在输入字符串中不是有效的终端命令,但也打印command not found。另一方面,当子串后跟&#39 ;;'时,它不会打印任何内容。是一个有效的终端命令,并将子串作为命令执行,例如,如果输入" sjhjh; ls"它将执行ls命令。

如何摆脱command not found部分? 这是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char * input;
    char * str;
    char * word;
    char terminator = ';';

    if (argc < 2) {
         fprintf(stderr,"ERROR, no string provided\n");
         exit(1);
     }

     input = argv[1];
     word = strchr(input, terminator);
     if (word != NULL) printf("%s\n", word);
     return 0;
}

1 个答案:

答案 0 :(得分:15)

当您执行以下程序时:

your_program_name sjhjh;ls

在命令行中,您实际上调用了两个程序。第一个是your_program_name sjhjh(因此,argv[1]"sjhjh"),第二个是ls。你需要的是确保命令行的其余部分被shell解析,这是通过正确引用它来实现的:

your_program_name 'sjhjh;ls'