c - 输入中的 ';' 字符被误解

标签 c shell

我编写了一个程序来使用“;”拆分输入字符串作为终止符并打印';'之后的字符串部分。只要子字符串跟在“;”之后,程序就会显示正确的输出输入字符串中的不是有效的终端命令,但还会打印 command not found。另一方面,当子字符串后跟 ';' 时,它不会打印任何内容是有效的终端命令并将子字符串作为命令执行,例如如果输入“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;
}

最佳答案

当你执行你的程序时:

your_program_name sjhjh;ls

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

your_program_name 'sjhjh;ls'

关于c - 输入中的 ';' 字符被误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647861/

相关文章:

c - 奇怪的结构声明

c - struct passwd 是内存泄漏的来源 - 如何正确释放?

macos - 如何在 OS X 中使用 shell 脚本以编程方式将 FLV 视频文件转换为 MP4?

regex - 如何将 unicode 字符与 awk 的正则表达式正确匹配?

c - long long int 算术

c++ - 需要 PRBS 模式生成 C/C++ API

bash - 如何判断字符串是否未在 Bash shell 脚本中定义

bash - 进程替换在 bash 脚本中不起作用

c# - 如何将 2D int 数组从 C 代码返回到 C#?

Bash - 将所有输出发送到日志文件,但显示错误