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

Ama*_*ith 5 c bash converters

我发现了以下 Bash - > C转换器.

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

原因:C比BASH快吗?我想运行一些代码而不是一个cron工作.

Jan*_*lho 4

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

  1. 解释脚本的速度可能会更慢
  2. 可维护性也许您曾经对 C 有更多的经验
  3. 脚本的灵活性显示出通过合理的努力可以实现的目标的局限性
  4. 集成也许您已经有了一个愿意与脚本紧密集成的代码库
  5. 可移植性

还有其他原因,例如可扩展性、效率等等。

根据“转换”的目标,有很多方法可以实现 C 等效项,不同的“本机”代码量不同。作为一个例子,我们可以考虑两个极端。

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

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

在另一个极端,我们以更 C 的方式进行了完全重写。这会将所有条件替换为 C 条件、lscd命令rm到各自的系统调用中,并可能用适当的库替换字符串处理。

这可能会更好地实现某些目标,但成本可能会比其他方式更高,而且还会消除大量代码重用,因为您必须实现与简单命令等效的功能。

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

Don't script in C, and don't code in Bash
Run Code Online (Sandbox Code Playgroud)

最好知道如何以及何时使用您拥有的工具,然后找到通用的通用工具(又名,没有灵丹妙药之类的东西)。

我希望这会有所帮助=)