命令简介

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.pswp.cn/pingmian/92481.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92481.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92481.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

visual studio 无明显错误,但是无法编译成功解决—仙盟创梦IDE

往后面查看rror CS0246: 未能找到类型或命名空间名“SimpleClass”(是否缺少 using 指令或程序集引用?)修复阿雪技术观在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是…

《论文阅读》传统CoT方法和提出的CoT Prompting的区分

论文:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models作者对传统CoT方法和本文提出的CoT Prompting的区分。1. 传统方法的局限性 (1) 基于微调的CoT(Rationale-Augmented Training) 实现方式:需人工标注大…

Minio 高性能分布式对象存储

1、什么是对象存储? 描述: 对象存储(Object Storage)是一种存储数据的计算机体系结构,它以对象的形式存储和管理数据。与传统的文件系统和块存储不同,对象存储将数据作为对象存储在分布式的存储集群中,每个对象都有一…

[深度学习] 大模型学习4-RAG技术全景解析

在大语言模型基础知识一文中,检索增强生成(Retrieval-Augmented Generation,简称 RAG)技术作为构建大语言模型(Large Language Model,简称 LLM)应用的一种方式已被简要提及,本文将详…

4G/5G无线电单元系统

4G/5G无线电单元系统 ADI公司的核心技术和领域专业知识帮助客户在全球范围内规划、设计、打造更出色的高性能通信系统。 我们的无线电单元(RU)设计平台利用新一代技术来提供高性能解决方案,帮助客户消除设计障碍、缩短产品开发周期,加快产品上市时间。 价…

HarvardX TinyML小笔记1(番外2:神经网络)

1 介绍 图片来自:https://zh.wikipedia.org/zh-cn/%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C 神经网络一直感觉挺神奇的,江湖也说可解释性很差,无论如何还是学学吧。借这次学习哈佛的TinyML,也就顺带弄了。 这里…

计算机网络 第2章通信基础(竟成)

第 2 章 物理层【考纲内容】1.通信基础 (1) 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念 (2) 奈奎斯特定理与香农定理 (3) 编码与调制 (4) 电路交换、报文交换与分组交换 (5) 数据报与虚电路2.传输介质 (1) 双绞线、同轴电缆、光纤与无线传输介质;(2…

2025-08-09通过授权码的方式给exe程序充值

2025-08-09通过授权码的方式给exe程序充值主要点: 一次性授权机制: 新增 .used_licenses 文件记录所有已使用的授权码 每次激活前检查授权码是否在已使用列表中 激活成功后立即将授权码标记为已使用 时效性验证: 授权码包含过期时间戳&#x…

工具类-高效集合差异计算工具DiffWrapper

集合差异工具类-DiffWrapper 原因 在编辑过程中,肯定会存在对于子表的更新操作,这种更新分为三种: 要加的, 要删的,要更新的,并且传参只有一个modifyVO的, 每一个都写有点过于冗余,故考虑提取一…

SimBA算法实现过程

文章目录添加噪声衡量扰动示例数值总结高级索引变量名代码总体代码添加噪声 操作:将频率扰动通过trans( )转为像素域扰动加到原始图像上(trans返回频率域转换为像素域的结果) expanded (images_batch[remaining_indices] # 原始图像&…

【面试题】cookie和session 的区别

文章目录一、核心定义与存储位置二、关键区别对比三、典型使用场景四、关联与依赖总结在Web开发中, Cookie和 Session是两种常用的状态管理机制,用于在无状态的HTTP协议中保存用户信息(如登录状态、偏好设置等)。二者的核心区别体…

【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索

文章目录一、网格搜索:穷举式的最优解寻找1、数学推导过程1. 搜索空间的数学结构2. 优化问题的数学性质3. 收敛性分析4. 误差分析2、为什么网格搜索有效?1. 全局最优性保证2. 可重现性与稳定性3. 参数敏感性分析3、适用场景与局限性二、随机搜索&#xf…

免费PDF翻译 离线自建

https://github.com/Byaidu/PDFMathTranslate/blob/main/docs/README_zh-CN.md https://github.com/Byaidu/PDFMathTranslate/releases 方法 针对不同的使用案例&#xff0c;我们提供不同的方法来使用我们的程序&#xff1a;1. UV 安装 安装 Python (3.10 < 版本 < 3.12)…

DeepSeek智能考试系统智能体

一、deepseek-app-1.0 1、系统要求 CentOS 7.9Python 3.8Node.js 16MySQL 8.0 2、部署步骤 运行初始化脚本&#xff1a;./scripts/setup.sh初始化数据库&#xff1a;mysql -u root -p < scripts/init_db.sql启动服务&#xff1a;./scripts/start.sh 3、访问地址 前端&…

4深度学习Pytorch-神经网络--损失函数(sigmoid、Tanh、ReLU、LReLu、softmax)

目录 激活函数 1. Sigmoid 2. Tanh 函数&#xff08;双曲正切&#xff09; 3. ReLU 函数 4. Leaky ReLU (LReLU) 5. Softmax 总结对比表 损失函数选择 激活函数 激活函数是神经网络中每个神经元&#xff08;节点&#xff09;的核心组成部分。它接收上一层所有输入的加权…

探索Trae:使用Trae CN爬取 Gitbook 电子书

在以前使用过Cursor&#xff0c;但是后期由于试用资源很少&#xff0c;免费资源用完我就卸载掉啦&#xff0c;最近又需要开展相关工作&#xff0c;因此下载了最新版的Trae。Trae 2.0最近很火&#xff0c;我正好想要爬取某一个Gitbook 电子书&#xff0c;因此尝试使用Trae和Pyth…

嵌入式知识日常问题记录及用法总结(一)

文章目录摘要问题一、内核启动流程1.1 ARM内核上电复位与BootROM执行​启动代码&#xff08;Startup Code&#xff09;执行跳转到用户程序1.2 内存管理问题二、C语言基础2.1 常量指针和指针常量区别2.2.函数指针和指针函数区别2.3 关键字Volatile2.4 队列结构体数据摘要 嵌入式…

使用Navicat备份数据库MySQL、PostGreSQL等

Navicat 支持多种数据库系统&#xff0c;可通过手动或自动方式进行数据备份&#xff0c;整个过程还是相对简单且直观&#xff0c;比自己敲命令行方便多了。一、备份步骤1.1、手动备份1、打开Navicat并连接数据库&#xff1a;首先&#xff0c;启动Navicat并连接到您的MySQL数据库…

Web3: 用ERC-1400革新公司股权激励

大家好&#xff01;今天&#xff0c;我们来聊一个非常酷的话PEG话题&#xff1a;如何利用Web3技术&#xff0c;特别是ERC-1400证券型代币标准&#xff0c;来革新传统的公司股权激励模式。 大家是否想过&#xff0c;派发给员工的期权或限制性股票&#xff08;RSU&#xff09;可以…

【Python 高频 API 速学 ④】

一、为什么是这 4 个&#xff1f; 列表&#xff08;list&#xff09;是 Python 最常用的可变序列&#xff0c; 90 % 的操作可以浓缩成 「增、并、删、排」 四个字&#xff0c; 而这四个字正好对应 append / extend / pop / sort。二、四剑客一览方法作用原地&#xff1f;返回值…