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

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.dtcms.com/a/322684.html

相关文章:

  • 版本控制的详细说明介绍(已有github账号版)
  • 记一次奇异的bug
  • 蓝牙技术概览
  • [Oracle] SUBSTR()函数
  • 轻量化阅读应用实践:21MB无广告电子书阅读器测评
  • Spring Boot 应用测试全指南:从单元测试到集成测试的实战之路
  • 密集遮挡场景识别率↑31%!陌讯轻量化部署方案在智慧零售的实战解析
  • ppt 生成视频的 ai 大模型全面解析
  • ORA-600 kcratr_nab_less_than_odr和ORA-600 4194故障处理---惜分飞
  • 书生浦语第五期-L1G4-InternLM 论文分类微调实践(XTuner 版)
  • 机器翻译中的语言学基础详解(包括包括语法、句法和语义学等)
  • HashTable, HashMap, ConcurrentHashMap
  • SpringBoot 集成 MapStruct
  • 10. 怎么实现深拷贝?
  • 大模型SSE流式输出技术
  • C++ 类模板
  • 使用langchain框架开发一个能调用工具的聊天助手Demo
  • MCU-基于TC397的启动流程
  • SQL基本
  • “自动报社保 + 查询导出 ” 的完整架构图和 Playwright C# 项目初始化模板
  • 2022 RoboCom 世界机器人开发者大赛-本科组(国赛)
  • 【阿里巴巴大数据实践之路学习记录】第十章-维度设计
  • 算法_python_学习记录_02
  • Docker大全
  • 通过 Docker 运行 Prometheus 入门
  • 开源智能手机安全相机推荐:Snap Safe
  • 数据结构(9)——排序
  • 【C++上岸】C++常见面试题目--数据结构篇(第十五期)
  • 搜索算法经典案例
  • SpringSecurity过滤器链全解析