当前位置: 首页 > ds >正文

Linux系统之lua 详解

命令简介

luaLua 语言的解释器,用于加载和执行 Lua 程序(包括文本源码和预编译的二进制文件)。它支持两种运行模式:批处理模式(执行指定脚本文件)和交互式模式(逐行读取并执行输入的命令),同时可通过命令行选项控制程序加载、库引入等行为,是运行 Lua 脚本的核心工具。

其核心功能:

  • 脚本执行:运行 .lua 文件或预编译的二进制文件(通过 luac 编译)。
  • 交互模式:提供 REPL(Read-Eval-Print Loop)环境,逐行执行 Lua 代码。
  • 参数传递:支持通过命令行向脚本传递参数(如 arg 表)。
  • 环境初始化:执行 LUA_INIT 环境变量定义的代码(启动前自动加载)。

适用场景:

  • 开发者调试 Lua 脚本。
  • 快速测试 Lua 片段(如 lua -e "print(math.sin(0))")。
  • 作为系统脚本工具(通过 #!/usr/bin/lua 定义可执行文件)。

命令语法

lua [选项] [脚本文件 [参数]]

核心功能

1. 脚本执行模式

  • 文本脚本:直接运行 .lua 文件。
  • 预编译脚本:执行 luac 编译后的二进制文件(后缀 .luac)。
  • 标准输入:通过 - 读取 stdin 作为脚本(如管道输入)。

2. 交互模式

  • 启动后进入 REPL 环境,提示符默认为 >,可自定义 _PROMPT
  • 支持多行输入(未完成语句时提示 >>),按 ; 强制语法错误可中断输入。

3. 参数传递

  • 脚本参数:通过 arg 全局表访问。
    • arg[0]:脚本文件名(如 script.lua)。
    • arg[1], arg[2], ...:命令行参数(从 1 开始)。
    • arg.n:参数总数。
    • arg[-1], arg[-2], ...:命令行中脚本前的参数(如 lua -e "a=1" script.lua 中的 a=1)。
  • 特殊字符处理:参数中含空格或 shell 特殊符号需加引号(如 "file name")。

4. 环境初始化

  • 启动前执行 LUA_INIT 环境变量:
    • 格式为 @filename:执行指定文件。
    • 否则:执行 Lua 语句(如 LUA_INIT="print('init')")。

选项详解

选项功能
-将标准输入(stdin)作为脚本执行,非交互模式。
-e stat执行 Lua 语句 stat(需转义特殊字符)。
-i执行脚本后进入交互模式(即使脚本已结束)。
-l name加载模块 name(调用 require('name')),常用于加载库。
-v显示 Lua 版本信息并退出。

使用示例

示例 1:运行脚本文件

lua script.lua arg1 arg2
  • arg1, arg2 通过 arg[1]arg[2] 访问。

示例 2:交互模式

lua -i
> print("Hello, World!")
Hello, World!
> a = 1 + 2
> print(a)
3

示例 3:执行单条语句

lua -e "print('Quick test')"

示例 4:加载模块并运行

lua -l math -e "print(math.pi)"

示例 5:标准输入作为脚本

echo "print('Hello from stdin')" | lua -

示例 6:自定义交互提示符

_PROMPT="Lua> " _PROMPT2="Lua>> " lua -i
Lua> print("Custom prompt")
Custom prompt
Lua> a = 1
Lua> a + 2
Lua>> 3

注意事项

  1. 参数转义

    • 包含空格或特殊字符的参数需用引号包裹(如 "file name"),但引号会被 shell 移除。
    • 示例:
      lua script.lua "arg with space"
      
  2. 交互模式中断

    • 输入未完成时,添加 ; 强制语法错误可中断输入(如 print("incompleteprint("incomplete";)。
  3. 环境变量优先级

    • LUA_INIT 在命令行参数前执行,可用于初始化全局变量或加载库。
  4. 预编译脚本限制

    • 只能执行由 luac 生成的 .luac 文件,无法直接运行源码。
  5. 版本兼容性

    • 不同 Lua 版本(如 5.3 vs 5.4)的语法和库可能不兼容,需确认环境版本。

典型应用场景

  1. 快速测试代码片段

    lua -e "print(table.concat({1,2,3}, ','))"
    
  2. 自动化脚本
    创建可执行脚本 script.lua

    #!/usr/bin/lua
    print("Running script with args:", table.unpack(arg))
    

    赋予权限并运行:

    chmod +x script.lua
    ./script.lua arg1 arg2
    
  3. 调试模块加载
    使用 -l 加载模块并测试功能:

    lua -l lfs -e "print(package.loaded.lfs)"
    
  4. 批量处理文件
    结合 shell 传递参数:

    find . -name "*.txt" | xargs -I {} lua process.lua {}
    

退出状态码

状态码含义
0正常退出
1参数错误或脚本执行失败
2内部错误(如内存不足)
http://www.xdnf.cn/news/17518.html

相关文章:

  • 一周学会Matplotlib3 Python 数据可视化-标注 (Annotations)
  • 【线性代数】6二次型
  • Windows设置英文路径显示为中文名称的文件夹
  • Android 设置/修改系统NTP服务地址
  • Golang的本地缓存freecache
  • Nginx 功能扩展与二次开发实践
  • HUAWEI交换机命令基础
  • C++面向对象及其特性
  • AI 边缘计算网关:开启智能新时代的钥匙
  • Claude Code 的核心能力与架构解析
  • 【软考中级网络工程师】知识点之防火墙
  • CosyVoice 语音合成模型性能优化实战:从 CPU 瓶颈到 GPU 加速的完整解决方案
  • 北京JAVA基础面试30天打卡05
  • springBoot集成easyExcel 实现文件上传
  • 【Spring Boot启动流程底层源码详解】
  • 【从汇编语言到C语言编辑器入门笔记7】 - C语言编译器执行过程
  • Web3: 用ERC-1400革新公司股权激励
  • 【LeetCode 热题 100】(六)矩阵
  • 扩散LLM推理新范式:打破生成长度限制,实现动态自适应调节
  • 组合期权:垂直价差
  • 【股票数据API接口17】如何获取强势股池数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 【线性代数】线性方程组与矩阵——行列式
  • Red Hat Enterprise Linux 7.9安装Oracle 11.2.0.4单实例数据库-图文详解
  • Docker部署whisper转写模型
  • VS Git巨坑合并分支失败导致多项无关改变
  • urmom damn the jvm
  • SqlSugar vs EF Core 对比 2025年 .NET ORM
  • GPT-5深度解析:革命性AI模型的全面报告与实战指南
  • 零基础小白如何使用QGIS制作研究区地形区位图教程
  • 浅试A2A