我编写了一个 Bash 枚举器,因为我受够了 xargs

我编写了一个 Bash 枚举器,因为我受够了 xargs

Hacker News 摘要

原标题:I wrote an bash enumerator because I was sick of xargs

网页作者介绍了他编写的一款名为 bashumerate 的工具,这是一款为终端设计的可编程迭代器。作者表示,他在日常使用 Bash 脚本时,经常对 xargs 的繁琐以及 for 循环、find 命令之间互不统一的语法感到厌烦,因此开发了这个工具来提供一种更简单、更一致的方式来处理各种遍历操作。

核心功能与用法

bashumerate 的核心逻辑是用一致的语法处理不同的数据源。其基本格式为使用 -f 等参数指定来源,用 -- 分隔命令,并使用 {} 作为占位符。

该工具支持四种主要的源类型:

• 文件源:使用 -f 参数,例如通过 enumerate -f 星号.sh -- wc -l {} 来统计所有脚本文件的行数。

• 行源:使用 -l 参数,例如通过 enumerate -l /etc/hosts -- echo {} 来逐行读取文件内容。

• 范围源:使用 -r 参数,例如通过 enumerate -r 1 10 -- printf n=%d {} 来生成并处理 1 到 10 的数字序列。

• 列表源:使用 -L 参数,例如通过 enumerate -L a b c -- echo item: {} 来遍历手动输入的列表。

如果不提供具体的命令,该工具会将项目直接输出到标准输出,用户可以将其通过管道传递给其他命令,例如配合 while 循环或 xargs 使用。

相比传统方式的优势

作者强调了 bashumerate 的几大优点:

1. 语法高度一致:无论处理的是文件、行、数字范围还是自定义列表,占位符永远是 {}。

2. 模板模式:支持单引号包裹的命令作为 Shell 模板,可以轻松实现复杂的链式操作,如 enumerate -f 星号 -- cat {} | head -5。

3. 内置过滤功能:提供了 --include 和 --exclude 参数,支持使用通配符模式进行过滤。

4. 安全处理特殊字符:支持 -0 参数,通过 NUL 分隔符处理包含空格或特殊字符的文件名,确保运行安全。

5. 易于扩展:用户只需在特定目录下添加脚本文件,即可自定义新的数据源。

自定义扩展机制

该工具的扩展性非常强。用户只需在 lib/enumerators 目录下创建一个脚本,并定义一个以 enumerate_source_ 开头的函数。例如,创建一个处理 Docker 容器的源,之后就可以直接使用 enumerate docker -- docker restart {} 这样的命令。这种机制无需复杂的注册或配置过程。

技术实现细节

bashumerate 的核心代码非常精简,大约只有 140 行 Bash 代码。在底层实现上,它内部使用 NUL 分隔符来保证处理带有空格或特殊字符的文件时的安全性。占位符 {} 的替换是在 Shell 层面完成的,作者明确表示没有使用 sed 或 eval 等可能带来风险的技巧。

安装与获取

该项目托管在 GitHub 上,名为 wallach-game/bashumerate。用户可以使用 basher 进行安装,也可以通过克隆仓库并手动创建软链接的方式将其添加到系统的可执行路径中。作者幽默地提到,工具的名字就是 bash 和 enumerate 的简单组合,虽然缺乏创意,但准确表达了它的功能。


原文:https://numerlab.org/2025/07/20/bashumerate-enumerator/

评论:https://news.ycombinator.com/item?id=48984270

Report Page