将Bash脚本转换为C。这可能吗?

将Bash脚本转换为C。这可能吗?,c,bash,converters,C,Bash,Converters,我找到了Bash->C转换器 这样一种从bash转换到c的方法可行吗 原因:C比BASH快吗?我想作为一个执事而不是一个cron工作来运行一些东西。有可能,问题是这样做的目的是什么。它们可以是以下各项的子集: 速度解释脚本的速度可能较慢 可维护性也许您有一段时间对C语言有更多的经验 灵活性该脚本显示了通过合理努力可以实现的限制 集成也许您已经有了一个愿意与脚本紧密集成的代码库 可移植性 还有其他原因,比如可伸缩性、效率,还有可能更多 基于“转换”的目标,有很多方法可以实现C等价物,改变“本机”代

我找到了Bash->C转换器

这样一种从bash转换到c的方法可行吗


原因:C比BASH快吗?我想作为一个执事而不是一个cron工作来运行一些东西。

有可能,问题是这样做的目的是什么。它们可以是以下各项的子集:

  • 速度解释脚本的速度可能较慢
  • 可维护性也许您有一段时间对C语言有更多的经验
  • 灵活性该脚本显示了通过合理努力可以实现的限制
  • 集成也许您已经有了一个愿意与脚本紧密集成的代码库
  • 可移植性
  • 还有其他原因,比如可伸缩性、效率,还有可能更多

    基于“转换”的目标,有很多方法可以实现C等价物,改变“本机”代码的数量。作为一个例子,我们可以考虑两个极端:

    在一个极端情况下,我们有一个编译后的C代码,它的执行大部分与bash相同,因此原始脚本的每一行都会生成相当于fork/exec/wait系统调用的代码,其中的更改主要是执行与通配符扩展等价的操作,从环境变量中检索值,处理分叉过程的同步,并使用适当的系统调用处理管道

    请注意,这种“简单”的转换已经是大量的工作,这可能比仅仅编写另一个shell解释器更糟糕。此外,它也不能满足上面的许多目标,因为在可移植性方面,它可能仍然依赖于操作系统的系统调用,而在性能方面,唯一的好处是从最初解析命令行中获得

    在另一个极端,我们有一个更完整的重写C的方式。这将用C条件语句、
    ls
    cd
    rm
    命令替换所有条件语句,并可能用适当的库替换字符串处理

    这可能会更好地实现某些目标,但成本可能会比另一种方法更高,同时也会消除大量代码重用,因为您必须实现与简单命令等效的功能

    至于一个自动化的工具,我不知道有没有,如果有,它们可能没有广泛的用途,因为将Bash转换为C或C转换为Bash可能不是一个好主意。如果出现这样的需求,这可能是一个设计问题,因此重新设计可能是一个更好的解决方案。编程语言和脚本语言对于不同的工作来说是不同的工具,尽管它们之间存在交叉点。总的来说

    Don't script in C, and don't code in Bash
    
    最好知道如何以及何时使用你拥有的工具,然后找到一个通用工具(也就是说,没有银弹之类的东西)


    我希望这有点帮助()

    我肯定有人制作了一个工具,只是因为他们可以,但我还没有看到。如果需要从C代码运行bash脚本,可以通过(例如)系统调用直接执行它:

    system("if [ -f /var/log/mail ]; then echo \"you've got mail! (file)\"; fi");
    
    除此之外,我不知道有什么简单的方法可以“自动”做到这一点。作为人类,我们可以看到上述情况,并将其等同于:

    if( access( "/var/log/mail", F_OK ) != -1 )
        printf("you've got mail! (file)");
    
    这是可以实现的十几种方法之一。因此,手工实现这一点非常容易,显然需要付出更多的努力,可以将其视为bash->C编译器来自动完成

    那有可能吗?当然

    例子?对不起,没有。

    当我需要时,我用一个程序来混淆代码。 对于我使用过的一些程序,它确实提高了速度,而对于其他程序,它会减慢脚本速度,但这不是我使用它的原因。我的主要用途是二进制文件不能被临时用户更改或读取

    文章:这里

    开发商的网站:


    如其中一页所述,它介于小工具和实际工具之间。

    您当然可以从C运行bash脚本。由于bash是一种非常简单的语言,因此可以手动将其转换为C。您尝试这样做是否有非学术原因?或者这只是你的兴趣?假设bash是用C编写的,一个假设的转换工具可以打印出bash的大部分源代码,并向它传递一个硬编码的参数。我真的不相信你能用bash语言编写一个可靠的bash-to-C转换器!C将比BASH快得多,对吗?宝瓶座,链接不再可用。通过运行
    ps | grep进程
    ,可以轻松提取SHC二进制文件的源代码。shell代码就在进程名称旁边。