Bunster:将 bash 脚本编译为自包含的可执行文件


您是否曾希望您的 shell 脚本能够更快、更便携、更安全?Bunster将您的 shell 脚本转换为高效、独立的二进制文件,这些二进制文件易于跨平台分发和部署(目前仅支持 unix) ,从而实现了这一目标。

Bunster和其他工具不一样,它不只是简单地把你的脚本包起来,它还会用一种叫Go的超强工具,把你的脚本变成电脑能直接理解的语言。这样,你的脚本就会跑得飞快,而且不管在哪台电脑上都能稳稳地运行。

其实,Bunster是个能把脚本语言变成Go语言的神奇转换器。它先把你写的脚本变成Go语言的代码,然后你可以选择用Go的工具把这些代码变成电脑可以直接运行的程序。

Bunster特别擅长处理bash这种脚本。现在它用的语法和功能都是从bash那里学来的。等我们发布了第一个正式版本后,它就能支持更多种类的脚本语言啦!

目标
除了让shell 脚本跑得更快、更安全、更方便之外,我们还打算给 Bunster 加一些超酷的新功能,让写 shell 脚本变得像玩现代编程语言一样爽!这些功能有的已经能用,有的还在计划中。(如果你也想帮忙,欢迎加入我们,一起让 Bunster 变得更强大!)

1. 支持不同的 Shell:现在 Bunster 只支持 bash 脚本,但以后我们会让它也能搞定其他类型的 Shell 脚本。

2. 模块化:Shell 脚本一直没有一个好用的模块系统,我们打算改变这一点!有了模块系统,你就可以把自己的脚本打包成“库”,方便以后重复使用,或者分享给别人用。

3. 静态资源嵌入:这个功能可以让你在“打包”脚本的时候,把一些文件(比如配置文件)直接塞进脚本里,变成脚本的一部分。(Go 语言已经有这个功能了,我们会把它用到 Bunster 里。)

4. 密码和过期锁定:没想到吧?居然有人想要这个功能!简单来说,就是你可以给脚本设置一个“过期时间”,过了这个时间,脚本就不能用了。你还可以给脚本加个密码锁,每次运行的时候都得输入密码才能用。

5. 标准库:我们打算把一些常用的命令直接做到 Bunster 里面,这样你就不用每次都去调用外部的程序了,用起来更方便!

网友1:
我经常碰到差不多的问题。我有一个越来越长的 bash 脚本,它变得越来越复杂。当 bash 脚本变得特别长的时候,我发现以后再去改它就会特别麻烦。

所以,到了某个时候,我就会完全换一种语言,比如用 python、lua、c 或者其他我喜欢的语言,重新写一个工具。

时间久了,我对“足够复杂”的标准越来越低了(就是觉得什么时候该放弃 bash,换成 python 这样的语言)。现在我的规则是,只要我做的事情有点“不简单”,我就应该用脚本语言来做。

不过,这样做的副作用是,我现在写 Bash 脚本的水平比以前差多了。现在我觉得“特别简单”的事情也越来越少了!

网友2:
Python 的问题是它的启动时间有点慢,还有打包的时候特别麻烦(比如依赖关系一团糟,或者用 pipx/uv 这种工具时要搞一堆虚拟环境)。所以我一直在把一些 shell 脚本改成 Makefile(虽然听起来有点奇怪,但它确实有用,而且很严谨,还能免费得到并行处理的能力),或者用 Rust 写的“脚本”,具体用哪个要看脚本的任务是什么(比如输出的内容多不多,要执行的命令多不多等等)。

另外,用更好的 shell 语言(比如 Fish Shell)可以大大提高工作效率(也让维护和脑子更轻松),这样就不会出现“写完之后再也不想看”的情况了。这是一个代码仓库,里面混合了 Fish Shell 脚本和一些被我改成 Rust 的脚本 。

网友3:
我维护了一个叫 discord.sh 的项目,它可以用纯 Bash(再加上一点点 jq 和 curl)来发送 Discord 的 webhook 消息。不过,等到某个时候,我可能会把它换成用 Go 或者 C 来写。
https://github.com/fieu/discord.sh

网友4:
Shell 脚本最重要的一个特点就是它的源代码很容易查看和检查。
把它变成你说的那种东西,感觉会让人压力很大,因为这样就看不到源代码了。

Shell 脚本的语法确实有点糟糕,但我们写它就是为了轻松搞定一些简单的事情,而且不需要依赖太多别的工具。

在 Windows 上,用 git-bash 通常就足够做大多数 shell 脚本能做的事情了。

你这个工具感觉像是想把两个东西的好处都占上:既想用 bash 的语法,又想加一堆外部的依赖。