You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改build.rakumod的前提下创建带选项的install CLI工具?

问题背景

在build.rakumod中定义了多个multi sub MAIN( ... )子例程,其中一个如下:

multi sub MAIN(
    :$config = 'config', #= localised config file
    Bool :install($)!,     #= install a config directory (if absent) from default values
) { .... }

同时有命令行工具bin/build,内容为:

#! /usr/bin/env raku
use build

该工具可通过build命令搭配参数使用,现在希望新增CLI命令install,支持两种调用方式:

  • install
  • install --config=konf

要求**不修改build.rakumod**的前提下编写bin/install,此前尝试两种方法均失败:

  1. 直接调用MAIN:
#! /usr/bin/env raku
use build;
MAIN(:install)
  1. 通过use传递install:
use build :install

(此方法无效,因该语法用于标签,文档提及ARGS-TO-CAPTURE子例程,但不清楚如何使用)


解决方案

可以通过修改@*ARGS数组模拟命令行参数,再触发MAIN的标准参数解析逻辑,编写bin/install内容如下:

#! /usr/bin/env raku
use build;

# 强制添加--install参数,同时保留用户传入的其他参数
@*ARGS = '--install', |@*ARGS;

# 调用Raku内置的MAIN参数处理入口
MAIN::CALL-MAIN();

逻辑说明

  • @*ARGS = '--install', |@*ARGS;:将--install作为固定前置参数,拼接用户传入的其他参数(如--config=konf),让MAIN能识别到:install标志已设置,同时正确接收--config参数。
  • MAIN::CALL-MAIN():这是Raku处理MAIN子例程的标准入口,会自动解析@*ARGS并匹配对应的multi MAIN子例程。

测试验证

  • 执行install时,@*ARGS变为['--install'],匹配目标multi MAIN,使用默认config值。
  • 执行install --config=konf时,@*ARGS变为['--install', '--config=konf'],正确传递$config参数给MAIN。

注意:确保shebang行写为#! /usr/bin/env raku(开头的斜杠不可省略),避免执行时出现路径错误。

内容的提问来源于stack exchange,提问作者Richard Hainsworth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:16:04