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

如何使用Hammerspoon CLI并获取命令传入的自定义参数

问题原因

  1. _cli 是 hs -c 直接执行 Lua 代码时,临时执行上下文内的全局变量,不存在于 Hammerspoon 启动时预加载的模块/init.lua 的全局作用域中,你在注册 IPC 端口的代码里自然找不到这个变量。
  2. 你当前注册 ipc.localPort 的回调函数没有定义形参,无法接收命令行传入的参数,无返回值默认输出nil。

你看到的-- Legacy mode enabled --是命令行工具旧兼容模式的提示,不影响功能,添加--no-legacy参数即可关闭该提示。

解决方法

1. 调整回调函数接收参数

通过 ipc.localPort 注册的端口回调,会自动接收命令行中跟在--后的所有参数,同时-c指定的命令内容会作为第一个参数传入回调,你只需要给回调添加形参即可获取参数:

local ipc = require('hs.ipc')

-- 先确认命令行工具已安装,避免IPC调用失败
if not ipc.cliInstalled() then
    ipc.cliInstall()
end

-- 第一个参数是 -c 传入的命令,后续参数是 -- 后传入的内容
function fooHandler(cmd, ...)
    local extraArgs = {...}
    if cmd == 'bar' then
        print('调用bar命令成功')
        print('传入的baz参数为:', extraArgs[1])
    end
    -- 加返回值避免输出nil
    return true
end

local port = ipc.localPort('foo', fooHandler)

2. 执行调用命令

运行你原来的命令即可正常拿到参数:

hs -m foo -c bar -- baz

预期输出为:

调用bar命令成功
传入的baz参数为:	baz

补充:_cli变量的正确使用场景

如果你不需要走IPC端口注册的模式,只是想直接跑单行命令拿参数,可以直接用-c执行代码,此时就能直接读取_cli变量:

hs -c 'print(_cli.args)' -- baz

输出即为你传入的baz参数。

内容的提问来源于stack exchange,提问作者Thom Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:06:01