Bash shell脚本的编译器

Bash shell脚本的编译器,bash,compiler-construction,Bash,Compiler Construction,你知道有没有编译bash脚本的工具吗 如果该工具只是一个转换器(例如,将bash脚本转换为C程序的工具),只要可以编译转换后的结果就行了 我正在寻找类似的东西(这只是一个例子——我知道shc不能作为编译器工作)。还有其他类似的工具吗?我认为您不会找到任何东西,因为您无法真正“编译”shell脚本。您可以编写一个简单的脚本,将所有行转换为对系统(3)的调用,然后将其“编译”为C程序,但这不会对您当前使用的任何程序产生重大性能提升,并且可能无法正确处理变量。不要这样做 “编译”shell脚本的问题在

你知道有没有编译bash脚本的工具吗

如果该工具只是一个转换器(例如,将bash脚本转换为C程序的工具),只要可以编译转换后的结果就行了


我正在寻找类似的东西(这只是一个例子——我知道shc不能作为编译器工作)。还有其他类似的工具吗?

我认为您不会找到任何东西,因为您无法真正“编译”shell脚本。您可以编写一个简单的脚本,将所有行转换为对
系统(3)
的调用,然后将其“编译”为C程序,但这不会对您当前使用的任何程序产生重大性能提升,并且可能无法正确处理变量。不要这样做

“编译”shell脚本的问题在于,shell脚本只调用外部程序。

谷歌搜索会出现这种情况,但它会为每台机器的许可证支付50美元

文档中说,CCsh将Bourne Shell(不是bash…)脚本编译为C代码,并且它了解如何复制50多个标准命令的功能,从而避免使用
fork
命令


但是CCsh不是开源的,因此如果它不能满足您的需要(或期望),您将无法查看源代码来找出原因。

理论上,您实际上可以获得良好的性能提升

想想所有的

if [ x"$MYVAR" == x"TheResult" ]; then echo "TheResult Happened" fi
(注意调用test,然后是echo,以及需要进行的解释。)

可以用

if ( !strcmp(myvar, "TheResult") ) printf("TheResult Happened");

在C语言中:无需启动进程,无需进行路径搜索。很多好处。

这个节目看起来很有趣,但它确实提出了一个问题:“你想完成什么?”我应该在回答中问这个问题。如果这看起来像你想要的,最好的方法是用另一种语言重写BASH脚本(如果你绝对需要速度,C++,如果你需要在速度和内置功能之间有很好的平衡,Perl/Python,如果你真正需要的性能提高不是每个命令都是伪造的),那么他们在网站上就没有价格了。但要求联系他们,要求他们提供报价。此外,分发生成的二进制代码是免费的。@ChrisLutz,您现在可以完美地编译Perl或Python代码,接近机器执行。使用shell脚本通常执行的所有“文件管理”,它们无论如何都会受到I/O的约束。这并不是说所有系统支持软件的JIT自动重新加载编译(可能在适当的情况下与libbb链接)不一定会加快每一个基于GNU的发行版的速度,从而使其比已经编译了所有内容的Microsoft更具优势。:)Shell脚本可以做的不仅仅是运行外部程序。您可以执行循环、分配和比较变量以及其他操作。此外,许多shell在内部实现一些更常见的命令,因此它们不必调用外部程序来运行它们;然后echo“TheResult Occessed”fi根本不调用任何外部命令,因为test和echo都是bash内置的。因此不会发生分叉,因此,从编译到C的性能提升不会像上面建议的那样大。