Bun 宣布支持在 JavaScript 和 TypeScript 中进行跨平台 Shell 脚本编写

Bun Shell 发布:为 JavaScript 和 TypeScript 开发者提供跨平台 Shell 功能

Jarred Sumner,Bun 的 CEO 和创始人,最近宣布发布了 Bun Shell,为 JavaScript 和 TypeScript 开发者提供了一个跨平台的 Shell 环境。该版本旨在简化在 JavaScript 和 TypeScript 中执行 Shell 脚本的过程,提供类似于 bash 的功能,包括通配符、环境变量、重定向和管道等。目前,Bun Shell 处于 alpha 阶段,未来可能会有重大更改。

背景

在 Node.js 中执行 Shell 命令并不总是直接和简单的。尽管 child\_process 模块功能齐全,但它存在安全风险,尤其是在处理未经过处理的用户输入时,且使用起来不够便捷。另一方面,fs/promise 模块提供了异步的文件系统操作,但它无法直接替代常见的 Shell 命令。为了弥补这一差距,开发者社区转向了诸如 shelljs 和 rimraf 等包。

Bun Shell 的主要特性

Bun Shell API 引入了多项功能,旨在提升脚本编写的体验:

  1. 跨平台兼容性:Bun Shell 支持 Windows、Linux 和 macOS,消除了在不同平台上工作时需要额外依赖的需求。
  2. 类 bash 环境:提供了与 bash 类似的语法,符合 Shell 脚本编写的惯例,目前原生支持诸如 "ls"、"cd" 和 "rm" 等基本命令。
  3. 通配符支持:原生支持通配符模式(如 **, *, {expansion} 等),增强了命令创建的灵活性。
  4. 模板字面量:允许通过模板字面量执行 Shell 命令,并轻松插入变量和表达式。
  5. 安全性:默认情况下,所有字符串都会被转义,从而降低了 Shell 注入攻击的风险。

功能示例

Bun Shell 的基本功能使用示例:

import { $ } from "bun";
await $`echo "Hello World!"`; // 输出:Hello World!

通过 .text() 方法访问输出结果:

import { $ } from "bun";
const result = await $`echo "Hello World!" | wc -w`.text();
console.log(result); // 输出:2

与 zx 的比较

在 Reddit 上,用户 u/nonlogin 提问 Bun Shell 与 zx 的比较。用户 u/TheUnlocked 回应指出,Bun Shell 是一个全新的 Shell,具有类似于 bash 的语法(但跨平台且支持诸如重定向到缓冲区等高级功能),而 zx 则是一种更简单、更安全的方式来调用现有的 Shell。

灵感来源

Bun Shell API 的灵感来源于 zx、daxbnx

阅读 22
0 条评论