>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Rust

Amber:将编写 bash 脚本变成真正的编程

amber logo

每当一个普通的 bash 脚本增长到五十行时,代码库中就会开始一场静默的噩梦。变量周围的引号、条件语句中括号周围的空格、不可预测的错误处理,以及在脚本投入生产环境之前编译器完全沉默。我们已经学会了忍受这些,因为 shell 脚本可以在任何地方运行,无需安装 Python 或 Node.js 这样的运行时环境。

最近发现了 Amber——一个高级编程语言编译器,它将代码直接转换为干净的 Bash。这个想法看起来如此实用,让人不禁想知道为什么我们没有早点这样做?

这个项目是什么,为什么你需要它

Amber 解决了一个熟悉的痛点:让开发者使用现代语法、严格类型检查、构建时检查和便捷的字符串处理,同时保持最终产物是一个普通的文本脚本。生成的 .sh 文件可以部署到任何 Linux 服务器或在任何最小化的 Docker 容器中运行。那里只需要标准的 Bash 解释器,不需要其他任何东西。

编译器使用 Rust 编写,运行速度快,启用安全模式时生成可读的 shell 代码 set -e

Amber 代码长什么样

该语言的语法借鉴了 Rust、TypeScript 和熟悉的 shell 命令的优点。以下是一些立即引起注意的显著特性:

正确的类型化和清晰的变量

不再有 export 魔法和转义,而是使用常规类型:TextNumBool 和数组。

let name = "Alex" let age = 30 let is_admin = true echo "Пользователь: {name}, возраст: {age}"

编译器自动检查类型,不会让你在需要数字的地方传入字符串。

安全执行 shell 命令

该语言的主要特性是与系统工具的无缝集成。命令直接写在代码中的 $ 符号内或代码块中,编译器监控返回码。

let output = $curl -s https://api.github.com$ failed { echo "Ошибка загрузки данных" exit 1 } echo "Полученный ответ: {output}"

failed 结构强制你显式处理命令以非零状态退出的情况。不再会因为有人忘记检查工具的退出码而在部署过程中意外崩溃。

带有返回值的正确函数

在纯 Bash 中,函数除了数字状态码或通过 stdout 输出到 echo 外,无法正确返回值。在 Amber 中,函数的工作方式符合程序员的预期:

fun calculate_disk_usage(path: Text): Num { let raw = $df {path} | awk 'NR==2 {print $5}' | tr -d '%'$? return parse_num(raw) }

这在实践中有什么用

Amber 主要为云基础设施和自动化而设计。

  1. CI/CD 流水线。当构建步骤对于 YAML 中的三行代码来说太复杂,但又不想引入带依赖的 Python 时。Amber 在开发者机器或 CI 运行器上构建为单个二进制文件,然后一个现成的 .sh 可以部署到目标系统。
  2. Cloud-init 和 VM 初始化脚本。服务器准备脚本经常因为环境变量中的拼写错误而失败。编译前的静态分析可以让你免于数十次重启干净实例。
  3. 服务器系统工具。编写可靠的监控工具或日志轮转脚本,保证可以在任何服务器上运行,无需安装第三方包。

美中不足

项目作者诚实地在仓库开头放置了警告:该语言仍在积极开发中,尚未准备好大规模生产使用。语法可能还会发生变化,团队目前正在完善 shell 代码生成中的一些罕见边缘情况。

如果你决定在真实工作中尝试 Amber,在关键机器上运行之前检查生成的 bash 代码是很有必要的。幸运的是,生成的脚本保持开放且易于理解。

值得一试吗

如果你经常用 Bash 编写自动化脚本,厌倦了捕捉引号和空格相关的奇怪 bug——那答案绝对是肯定的。Amber 给你一种真正现代开发的感觉,而在此之前你只能与一个有着三十年历史的标准搏斗。试着重写你 CI 中的几个辅助脚本,看看可读性和可靠性的差异。

相关项目