2012-10-23 23 views
4

我发现以下内容: http://www.basic-converter.org/stable/bacon.bash将Bash脚本转换为C.可能吗?

是这样一种从bash转换为c的方式吗?

原因:是C那么快BASH?我想运行一些东西,而不是一个cron作业。

+0

您肯定可以从C运行bash脚本。由于bash是一种非常简单的语言,因此可以手动将其转换为C. – JavaCake

+0

你有没有试图做到这一点的非学术原因?或者它只是你的兴趣? – Mike

+0

假设* bash *是用C编写的,一个假设的转换工具可以打印出* bash *的大部分源代码,并传递一个硬编码参数给它。我真的不相信你可以用bash语言编写可靠的bash-to-C转换器! – anatolyg

回答

3

这是可能的,问题是什么是这样做的目标。他们可能是一个子集:

  1. 速度解释脚本可以慢
  2. 可维护性或许你有一个具有以C
  3. 灵活性脚本显示限制更多的体验时间有什么可以用合理的努力
  4. 集成也许你已经有一个代码库,你愿意紧密集成W¯¯实现第i个脚本
  5. 便携

还有其他原因,如可扩展性,效率,而且可能更多。

基于“转换”的目标,也有相当多的方式来实现一个等价的C,不同的是将“原生”的代码量。作为一个例子,我们可以考虑两个极端。

一个极端是,我们必须执行主要是作为庆典会,所以原来剧本的每一行会产生代码相当于叉/ EXEC /等待系统调用,其中的变化将主要是执行当量编译的C代码到通配符扩展,从环境变量检索值的,处理叉形过程的同步,并且也处理管道与适当的系统调用。

注意,这个“简单”的转换已经吨的工作,这将可能不仅仅是书面方式另一个shell解释更糟。此外,它不符合上述许多目标,因为便携明智的,它可能仍然依赖于操作系统的系统调用和性能明智的,唯一的收获是从最初的解析命令行。

在另一个极端,我们有在多个C的方式完全重写。这将使用C条件句,lscdrm命令到它们各自的系统调用和可能与相应的库替换字符串处理替换所有条件语句。

这可能是实现某些目标的更好,但成本可能会比其他方式更大,也消除了大量代码复用的,因为你必须要实现的功能等同于简单的命令。

至于这个自动化,我也不认识任何一个工具,如果有任何他们可能没有广泛使用,因为转换击到C或C Bash是不是可能是个好主意。如果出现这种需求,这可能是一个设计问题的征兆,因此重新设计可能是更好的解决方案。编程语言和脚本语言是不同的工作不同的工具,即使有什么之间可以跟他们做相交的区域。在一般情况下,

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

最好是知道如何以及何时使用你的工具,然后找一个普通的通用工具(亦称有没有这样的事情灵丹)。

我希望这有助于有点=)

+1

水瓶座链接不再可用。 – Yokai

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编译器自动完成的工作。

那么有可能吗?当然!
例子?抱歉,没有。