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

时间:2012-10-23 16:22:41

标签: c bash converters

我找到了following Bash - > C转换器。

这种方式可以从bash转换为c吗?

原因:C比BASH快吗?我想把一些东西当作一个守护者而不是一个cron工作。

3 个答案:

答案 0 :(得分:4)

我确信有人制作了一个工具,只是因为他们可以,但我还没有见过。如果需要从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编译器自动执行此操作。

有可能吗?当然!
例?对不起,没有。

答案 1 :(得分:3)

有可能,问题是这样做的目标是什么。它们可能是以下的一部分:

  1. 速度解释的脚本可能会更慢
  2. 可维护性也许您有时间拥有更多使用C
  3. 的经验
  4. 灵活性脚本显示了对通过合理努力可以实现的目标的限制
  5. 集成也许您已经拥有了一个愿意与脚本紧密集成的代码库
  6. 便携性
  7. 还有其他原因,例如可扩展性,效率以及可能更多。

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

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

    请注意,这种“简单”转换已经完成了很多工作,这可能比编写另一个shell解释器更糟糕。此外,它不符合上述许多目标,因为可移植性方面,它仍然可能依赖于操作系统的系统调用,而且性能方面,唯一的好处是最初解析命令行。

    另一方面,我们以更C的方式进行完全重写。这将使用C条件lscdrm命令将所有条件替换为它们各自的系统调用,并可能用适当的库替换字符串处理。

    这可能更好地实现某些目标,但成本可能比其他方式更大,同时也消除了大量代码重用,因为您必须实现简单命令的功能等价物。

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

    Don't script in C, and don't code in Bash
    

    最好知道如何以及何时使用您拥有的工具,然后找到一个通用的通用工具(也就是说,没有银子弹这样的东西)。

    我希望这有点帮助=)

答案 2 :(得分:0)

有一个我需要时用于混淆代码的程序。 对于我使用过的某些程序,它确实提高了速度,而在另一些程序上,它减慢了脚本的速度,但这不是我使用它的原因。对我来说,主要的实用工具是二进制文件无法由临时用户更改或读取。

文章:此处http://www.linux-magazine.com/Online/Features/SHC-Shell-Compiler

此处的开发者网站:http://www.datsi.fi.upm.es/~frosal/sources/

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