python - 将 Bash 解析为 Python

标签 python bash parsing parse-tree

<分区>

我想解析 Bash 脚本并将其转换为 Python 脚本(将表示有效 bash 脚本的文本转换为表示等效 python 脚本的文本)。 我该如何开始?任何以前的工作,推荐的博客/文章/书籍?

最佳答案

如果你想一想,一般,unix shell 脚本不能被解析成一些abstract syntax tree。因为 shell 不是这样工作的(它们本质上是将字符串扩展为其他字符串)。 Bash 是 working然后通过标记化 expanding东西。

比如想什么

mycd=cd
myexit=exit
$mycd /tmp
ls
$myexit 23

正在做

因此在实践中,您需要了解您的特定 shell 脚本在做什么,并用 Python 重写它。

你可以阅读一些关于编译的通用教科书,例如Dragon Book

因此,通用的 Bash 到 Python 转换器实际上是不可能的(至多,您将用 Python 编写一个类似 bash 的 shell 解释器)

理论上是Post rewriting systemTuring completeHalting problem是无法解决的(因此直觉认为 generic Bash to Python 编译器不存在,否则就像 Python 中一些无趣的 shell 解释器)。

然而,您可以采用一些启发式方法并花费大量时间使用各种启发式方法构建转换器。但一般情况下还是相当于Python中的一个shell解释器。我不确定是否值得付出努力。

另见 Yann Regis-Gianas FOSDEM2018 talk Parsing POSIX [S]hell

关于python - 将 Bash 解析为 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197107/

相关文章:

bash - 了解 bash 脚本开头的 PATH 变量导出

bash - BASH从youtube html文件中提取链接

c# - 如何使用 MSpec 有效地测试固定长度的平面文件解析器?

ios - JSON解析向iOS返回null(json字符串看起来正确)

python - Windows 上 select.select() 的问题

Python/Pandas 计算一目图组件

python - 无法通过 Python SDK 使用 BigQuery 运行多个更新

python - 如何将 numpy random.choice 应用于概率值矩阵(矢量化解决方案)

linux - 递归删除每个目录中除一定数量外的所有文件

python - 无法使用 BeautifulSoup 解析表