【问题标题】:validate bash commands before excution [duplicate]在执行之前验证 bash 命令 [重复]
【发布时间】:2013-09-24 11:57:50
【问题描述】:

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

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

例如:

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

此命令末尾缺少单引号 (')。它会在我的 java 程序中运行时失败。如果能早点失败就好了。所以我只想在我的程序开始时验证每个命令。

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

【问题讨论】:

  • "有什么简单的方法"没有。
  • bash -n filename。有关更多信息,请参阅上述问题。
  • 我没有阅读脚本。都是单独的命令。我想验证每个单独的命令。
  • 它怎么可能是一个重复的问题。 ???我正在验证单个命令。不是脚本.... :(

标签: java bash shell


【解决方案1】:

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

你试过用谷歌搜索这个吗?其他人已经写过它的可能性很小但非零。

【讨论】:

  • 感谢您的回复。我正在考虑只编写解析器。在此之前,我正在寻找其他最佳方式..
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    试试这个:

    sh -n yourscriptfile
    bash -n yourscriptfile
    

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

    【讨论】:

    • 你能解释一下它的作用吗?在目前的状态下,它几乎没有答案。
    • 我没有阅读脚本。都是单独的命令。我想验证每个单独的命令。
    • 只是语法验证
    • @RajeshBarri 如果您想验证单个命令,那么您应该构建自己的验证脚本。否则检查你可以使用上面的语法
    • @Bart: "-n" 表示 "noexec" 并告诉 shell 不要执行任何命令。
    【解决方案4】:

    哦,这真的很“容易”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2018-06-12
      相关资源
      最近更新 更多