【问题标题】:Compilers for shell scriptsshell 脚本的编译器
【发布时间】:2009-08-19 00:45:16
【问题描述】:

你知道是否有编译 bash 脚本的工具吗?

该工具是否只是一个翻译器(例如,将 bash 脚本转换为 C 程序的工具)并不重要,只要翻译的结果可以编译即可。

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

【问题讨论】:

    标签: bash compiler-construction


    【解决方案1】:

    Google 搜索会显示CCsh,但它会花费您每台机器 50 美元的许可证费用。

    文档说 CCsh 将 Bourne Shell(不是 bash ...)脚本编译为 C 代码,并且它了解如何复制 50 多个标准命令的功能,而无需 fork 它们。

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

    【讨论】:

    • 这个程序看起来很有趣,但它确实提出了“你想完成什么?”的问题,我应该在回答中问这个问题。如果这看起来像您想要的那样,更好的选择可能是用另一种语言重写 bash 脚本(如果您绝对需要速度,则使用 C++,如果您需要在速度和内置功能之间取得良好平衡,则使用 Perl/Python您真正需要的性能提升不是为每个命令分叉等)
    • 他们在网站上没有价格,但要求与他们联系以要求他们提供报价。此外,分发生成的二进制文件是免费的。
    • @ChrisLutz,您今天可以完美地编译 Perl 或 Python 代码,接近机器执行。使用 shell 脚本通常执行的所有“文件管理”,它们无论如何都会受到 I/O 的约束。并不是说所有系统支持软件的一些 JIT 自动重新加载编译,可能在适当的情况下与 libbb 链接,不一定会加速每个基于 GNU 的发行版,使其比已经编译所有内容的微软更具优势。 :)
    【解决方案2】:

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

    “编译”一个 shell 脚本的问题是 shell 脚本只是调用外部程序。

    【讨论】:

    • Shell 脚本可以做的不仅仅是运行外部程序。您可以执行循环并分配和比较变量以及其他事情。此外,许多 shell 在内部实现了一些更常见的命令,因此它们不必调用外部程序来运行它们。
    【解决方案3】:

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

    想一想

    if [ x"$MYVAR" == x"TheResult" ]; then echo "TheResult Happened" fi
    

    (注意调用测试,然后回显,以及需要完成的解释。)

    可以替换为

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

    在 C 中:无需启动进程,无需进行路径搜索。好东西。

    【讨论】:

    • 实际上,至少在 bash 中,上面的行 if [ x"$MYVAR" == x"TheResult" ] ; then echo "TheResult Happened" fi 根本没有调用任何外部命令,因为 test 和 echo 都是 bash 内置的。因此不会发生分叉,因此,从编译到 C 的性能提升不会像上面建议的那么大。
    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多