2013-09-24 90 views
-2

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

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

例:

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

在这里,单引号(')在这个命令的末尾被遗漏。它会在我的Java程序运行时失败。如果它可能会提早失败,那将会很棒。所以我只想在我的程序开始时验证每个命令。

我正在寻找最佳方法。

+2

“_是否有简单的方法_”号 – jlordo

+1

说'bash -n文件名'。有关更多信息,请参阅上述问题 – devnull

+0

我不是阅读脚本。所有都是单独的命令。我想验证每一个单独的命令。 –

回答

2

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

你试过Google吗?其他人已经写了一个小但非零的可能性。

+0

感谢您的回复.. 我在考虑只写分析器。在此之前,我正在寻找其他最佳方法.. –

0

试试这个:

sh -n yourscriptfile 
bash -n yourscriptfile 

set -u也有助于捕捉错别字和未初始化变量

+0

你能解释它是什么吗?在它的当前状态很难 – Bart

+0

我不是阅读脚本所有都是单独的命令我想验证每个单独的命令 –

+0

只是语法验证 – SriniV

1

检查语法的最好方法和参数是对应于正则表达式来解析用户输入什么你在期待。

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

0

哦,那真的很“容易”。

  1. 拿bash语法,例如从here或采取ANTLR语法形式here
  2. 将语法移植到java。你可以去除所有的C部分,并从真实的bahs语法中移植核心语法,或者使用预先构造的ANTLR语法。用你的语法ANTLR,xTextparser combinators。这三种解决方案都需要外部工具
  3. 在运行bash命令之前,可以使用语法对其进行验证。