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

如何编写可在Linux终端执行命令的Lua脚本?

Lua 中执行 Linux 终端命令的常用方法

1. 直接执行命令(无需捕获输出):os.execute()

这是 Lua 标准库自带的原生方法,直接调用系统 shell 执行传入的命令,行为和你手动在终端输入命令完全一致。

  • 基础用法说明:
    直接把要执行的命令作为字符串传入方法即可,示例:
    -- 执行 echo 打印内容
    os.execute("echo Pizza is delicious")
    
    -- 执行 apt 安装 git 示例,加 -y 参数跳过安装确认
    local install_exit_code = os.execute("sudo apt install -y git")
    if install_exit_code == 0 then
        print("git 安装成功")
    else
        print("git 安装失败,退出码:" .. install_exit_code)
    end
    
  • 返回值说明:
    调用后会返回三个值,第一个为命令执行的退出码,执行成功返回0,失败返回非零值,可用来判断命令执行结果。
  • 注意事项:
    如果命令需要交互(比如sudo需要输入密码),会直接占用当前终端的标准输入输出等待用户操作。

2. 捕获命令输出:io.popen()

如果你需要拿到命令的输出内容而不是直接打印到终端,可以用同样是标准库自带的io.popen()方法。

  • 基础用法示例:
    -- 执行命令并获取输出句柄,第二个参数 r 代表只读模式
    local cmd_handle = io.popen("echo Pizza is delicious", "r")
    if not cmd_handle then
        print("命令启动失败")
        return
    end
    -- 读取所有输出内容
    local cmd_output = cmd_handle:read("*a")
    -- 关闭句柄释放资源
    cmd_handle:close()
    
    -- 处理输出(默认带末尾换行,可按需去除)
    cmd_output = string.gsub(cmd_output, "\n$", "")
    print("命令输出为:" .. cmd_output)
    
  • 注意事项:
    如果需要同时捕获标准错误输出,可以在命令末尾加2>&1将stderr重定向到stdout,比如io.popen("ls no_exist_file 2>&1")。

通用注意事项

  • 执行包含变量拼接的命令时,一定要对变量里的特殊字符(空格、引号、$、;等)做转义,避免出现shell注入风险。
  • 如果需要更底层的进程控制(比如指定运行用户、单独控制标准输入输出/错误流),可以使用第三方luaposix库的相关接口,常规场景下以上两个标准库方法已经可以满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:15:00