我希望能够解析shell脚本并返回它可能执行的命令集(不包括if
和for
之类的shell关键字),包括由管道提供的所有命令以及反引号中包含的所有命令。
采用这种方法的合适方法是什么?我正在考虑正则表达式,但这可能还不够。但我不知道足够的解析理论来正确解决这个问题。
编辑:感谢目前为止的回复。我看到外部输入在确定这个问题时会是一个问题。如果我们将这个从分析中排除,那么在这种情况下它是否是一个合理的任务呢?
答案 0 :(得分:1)
你不能或者说不同:每个命令都可能被执行。
这是一个示例脚本。
$(cat somerandomfile)
它会做什么?答案取决于somerandomfile
内的内容。要确定可能执行的命令集,您必须评估整个环境(基本上每个时钟周期都会发生变化)。
答案 1 :(得分:0)
假设你有程序 X 来回答shell脚本 Y 使用命令 Z 的问题。然后我们可以构造执行任何程序的shell脚本 Y',并在完成后调用命令 Z 。因此,您要求的假设程序 X 解决了不可判定的Halting Problem。