【问题标题】:Algorithm to read and write command line string读取和写入命令行字符串的算法
【发布时间】:2013-02-08 20:10:09
【问题描述】:

我正在尝试编写一个程序,该程序可以读取命令字符串并对其进行验证(获取命令名称及其参数),更改这些参数,然后动态重写命令字符串。

我正在寻找可以解析命令字符串的算法或正则表达式。我熟悉 DOS 6.2 和批处理文件,但我对 Mac 知之甚少,比如我正在使用的终端、unix、shell 等。我不确定参数是否是从一个命令到下一个命令的不同语法。

更多信息:
我要做的事情是验证命令行的格式是否正确,例如,文件的路径在它们周围有引号或转义空格(如果存在)。我希望它是通用的,以便它可以与任何命令一起使用。

我使用的是 Mac,所以我可以在终端中进行测试。

【问题讨论】:

  • 我很不清楚你在这里问什么......你能举个例子吗?您是否建议您编写一个程序,当从命令行调用时,它会进行输入验证,然后调用其他已安装的程序?如果是这样,您打算用什么语言进行开发?
  • 我更新了问题。
  • 如果您使用命令行参数读取 ls 命令和 -l 选项之类的字符串并验证其命令与否?
  • 我怀疑你会发现你需要学习一些东西才能以我们真正能够提供帮助的方式重新表述这个问题。要记住的事情:每个程序都可以根据需要解析其命令行参数,并且实际上没有标准。并且多个程序可以在命令行上以当前 shell 定义的方式进行交互。需要考虑的事情:所有program "/path/to file"program /path/to\ fileprogram /path/to file 都是合法的。另外:你如何验证echo -e "1\n2\n3\n4\n5" | perl -lne 'print if (1x$_) !~ /^1?$|^(11+?)\1+$/'
  • @addaon - 我明白你的意思。我不知道每个程序都可以根据需要解析它的命令行。那么这是否意味着当我运行“program -e | blah blah blah 123”之类的命令时,“program”会得到一个包含短语“program”之后的所有内容的字符串?

标签: command-line terminal command-line-arguments


【解决方案1】:
        #include<stdio.h>

             main(int argc,char *argv[])

                {
            if(execlp(argv[1], argv[1], argv[2], "/usr/", (char *) 0)==-1)

               printf("This is not valid command\n");

              exit(0);

                }

运行程序:

         ./a.out ls -lhrt

这个程序处理了多个选项。

你想改变哪个目录而不是“/usr”目录

您动态运行程序并更改命令和选项。

【讨论】:

  • 对不起。我只知道这个概念。你阅读 exec 系统调用函数,你会得到更多的信息。
  • 所以我不太熟悉那种语言。上面的程序是否采用类似“ls”的命令并将其参数解析为数组或其他东西?在这种情况下,它会有一个数组,其中第一个和项目是“-l”?如果您添加了更多参数,例如“-l -define=Config::value,true”,它将在数组中包含两项,其中第一项是“-l”,第二项是“-define=Config::值,真”?
  • 这个程序实际上并没有做任何解析......相反,它只是使用提供的第一个参数调用给定的程序,在程序存在于/usr 目录中的进一步约束下.
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 2012-03-14
相关资源
最近更新 更多