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