执行前验证bash命令

时间:2013-09-24 11:57:51

标签: java bash shell

我正在读取输入中的一些命令,并在我的java程序中在运行时执行。如果存在任何语法或语义错误,它将在运行时失败。而不是我想早点失败。所以我想在执行之前验证命令。

我该怎么做?有没有简单的方法。

例如:

grep -P -o "cpums=[^ ]+" | cut -f2 -d= | cut -f1 -d"]" | awk '{a+=$1;}
END {print a;}

此命令末尾会遗漏单引号(')。它将在我的java程序中在运行时失败。如果它能早早失败会很棒。所以我只想在程序开始时验证每个命令。

我正在寻找一种最佳方式。

4 个答案:

答案 0 :(得分:2)

不,没有简单的方法。有一种困难的方法,它涉及到你提出一套规则并使用某种解析器。这是一种效率低下的方法,它涉及尝试执行命令只是为了查看它是否有效。可能还有其他方法,但我认为其中任何一种都不简单。

你有没有尝试谷歌搜索?有一个小但非零的可能性,其他人已经写过它。

答案 1 :(得分:1)

检查语法和参数的最佳方法是使用与您期望的正则表达式对应的用户输入进行解析。

如果它与你正在等待的wath不匹配,那么你可以向用户提示“使用说明”。

答案 2 :(得分:0)

试试这个:

sh -n yourscriptfile
bash -n yourscriptfile

set -u也有助于捕获拼写错误和未初始化的变量

答案 3 :(得分:0)

哦,这真的很“容易”。

  1. 拿bash语法,例如来自here或采用ANTLR语法形式here
  2. 将语法移植到java。您可以从真正的bahs语法中删除所有C部分并移植核心语法,或使用预先构造的ANTLR语法。将您的语法与ANTLRxTextparser combinators结合使用。这三种解决方案都需要外部工具。
  3. 在运行bash命令之前,您可以使用语法对其进行验证。
相关问题