run

run 通过与交互式终端相同的命令执行路径运行 .lil 工作流,支持变量、条件、结果捕获、嵌套脚本、预演和打包文件,并且不会调用操作系统命令行。

自动化版本 1.2.4稳定
lil-terminal

概览

把重复的维护步骤写入 .lil 文件,再用 run 顺序执行。先加 -n 预览检查。

自动化始终留在 lil-terminal 内部

每条可执行语句都按普通 lil-terminal 命令解析。依赖必须预先安装,工作流中不使用 @command;-n 只显示展开后的命令而不执行,运行 php、ses 等高权限非交互命令前必须显式使用 -x。

语法

lil-terminal
run <file.lil|[script]> [-n|-v|-k|-x] · run -p <source.lil> [target.lil]

参考

run task.lil

执行普通或打包的 .lil 脚本

run [md backup | copy public backup/public]

执行内联脚本;未加引号的 | 用于分隔语句

run <script> -n

仅验证并显示展开后的命令,不执行

run <script> -v

显示完整命令输出

run <script> -k

出错后继续;默认在第一次错误时停止

run <script> -x

允许 php、ses 等特权非交互命令

run -p <source.lil> [target.lil]

创建带校验和保护的打包脚本

lil <script>

run 的别名

plain .lil

UTF-8 文本,每行一条语句

packed .lil

包含 SHA-256 和 DEFLATE 数据的 @LIL1 头

setup.lil

授权后执行一次,成功后删除

autoload.lil

每个已授权会话执行一次

@<command>

自动安装仅用于交互模式,在脚本中会被拒绝

#lil file

只包含普通终端命令的 core 线性脚本;可通过路径或 < 启动

run workflow

需要变量、条件、嵌套、capture 或其他流程逻辑时使用 run

实际使用

经常重复相同的维护操作?把命令写进 .lil 文本文件,用 run 按顺序执行。它使用的是 lil-terminal 命令,不会调用操作系统的 shell。

先运行 run sandbox/scripts/workflow.lil -n,只检查步骤而不执行;确认后去掉 -n。短任务可直接写成 run [pwd | pwd],其中 | 用于分隔命令。

每行放一条命令或控制语句。set 保存变量,capture 记录输出,if/else 决定分支,run 调用子脚本。示例中的 if file ${source} 会在继续前检查文件是否存在。

-v 显示所有命令输出。默认遇到第一个错误就停止;-k 虽会执行后续步骤,但只要发生过错误,最终状态仍是 Stopped。预览并不能保证实际执行成功。

首行是 #lil 的文件可由 Base Core 直接按普通命令序列执行。需要变量、条件、嵌套时使用完整的 run。Minimum 主要支持单个文件参数。run [pwd] 这类不含空格的简短写法也可能执行;多命令内联脚本和高级参数需要 Base。

lil.php 旁的 setup.lil 在授权后执行,只有全部成功才删除;autoload.lil 每个授权会话运行一次。-p 用 SHA-256 和 DEFLATE 生成 @LIL1 文件,但**不会加密**。

脚本以当前 PHP 进程的权限运行。交互式操作和 @install 被禁止;php/ses 必须明确添加 -x。限制:纯文本 256 KiB、打包文件 384 KiB、1000 条语句、10 层嵌套、60 秒。已执行的文件变更不会自动回滚。

详细信息

普通文本限制为 256 KiB,打包输入为 384 KiB,脚本最多 1000 条语句、10 层嵌套和 60 秒。SHA-256 与 DEFLATE 用于完整性,不提供加密。

安全

脚本使用当前 PHP 进程的权限。交互命令被禁止,php 与 ses 必须显式使用 -x。不要运行未经检查的脚本。

自动安装

@command 便捷语法属于交互核心,而不是自动化语言。在 .lil 脚本中,以 @ 开头的命令会被拒绝。应在自动化之前显式安装脚本依赖,避免工作流在执行过程中隐式改变可用模块集合。

Core 线性脚本与 Run

以 #lil 开头的文件刻意保持得比 Run workflow 更简单:每个非注释行都是普通终端命令,顶层 | 分隔符按从左到右执行,并在第一次失败时停止。文件可直接按路径运行,也可用 < file.lil。当脚本需要变量、条件、嵌套脚本、capture、dry-run 或其他 workflow 能力时,请使用 run。

整个工作流(包括嵌套脚本)最多处理 1000 条非注释指令。-n 校验失败时显示 Stopped 而不是 Checked,预检不会执行命令。

交互式 sandbox 预览

可直接在页面中运行预先准备的示例。结果已预先生成并在浏览器中显示;服务器不会执行任何终端命令。

执行普通或打包的 .lil 脚本

安装与管理

安装当前兼容版本。完整功能请选择 Base,精简包请选择 Minimum;已安装模块的更新请使用 upgrade。

Base 与 Minimum 是同一当前模块版本的两个包。

Base 包

安装包含本地参考和全部已发布模式的完整包。

install run
Minimum 包

安装精简包。该包不包含本地参考;help <cmd> -i 会打开当前服务器参考。

install run -m
精确公开版本

安装这个确切的已发布版本。

install run -v 1.2.4
检查或升级

让 upgrade 检查兼容性,仅在需要时替换已安装块。

upgrade run
删除模块

删除扩展块,不影响核心和其他模块。

install run -u

示例

示例可复制,但网站不会执行。请先检查路径、权限和破坏性选项。

执行普通或打包的 .lil 脚本
run sandbox/scripts/workflow.lil
001 + pwd
002 + pwd
Completed: 2
显示完整命令输出
run sandbox/scripts/workflow.lil -v
001 + pwd
    sandbox
002 + pwd
    sandbox
Completed: 2
仅验证并显示展开后的命令,不执行
run sandbox/scripts/workflow.lil -n
001 · pwd
002 · pwd
Checked: 2
仅验证并显示展开后的命令,不执行
run sandbox/scripts/workflow.lil -n -v
001 · pwd
002 · pwd
Checked: 2
Run 的别名
lil sandbox/scripts/workflow.lil
001 + pwd
002 + pwd
Completed: 2

lil 是 run 的短别名;保存的 .lil 工作流和粘贴执行的自动化都使用同一套命令执行路径。

执行内联脚本;未加引号的 | 用于分隔语句
run [pwd | pwd]
001 + pwd
002 + pwd
Completed: 2
Run · name
run [set name demo | if eq demo demo | pwd | else | stop mismatch | end]
001 + pwd
Completed: 1
Run · file
run [if file sandbox/data/sample.txt | pwd | end]
001 + pwd
Completed: 1
Run · not
run [if not exists sandbox/missing.txt | pwd | end]
001 + pwd
Completed: 1
Run · location
run [capture location pwd | pwd] -v
001 + pwd
    sandbox
002 + pwd
    sandbox
Completed: 2
需要变量、条件、嵌套、capture 或其他流程逻辑时使用 run
run sandbox/scripts/nested.lil -v
001 + pwd
    sandbox
002 + pwd
    sandbox
Completed: 2
执行普通或打包的 .lil 脚本
run [upload | pwd]
001 – upload
    Command is not allowed in scripts
Stopped: 1
出错后继续;默认在第一次错误时停止
run [upload | pwd] -k
001 – upload
    Command is not allowed in scripts
002 + pwd
Stopped: 2
Run · 14
run [stop maintenance]
Line 001 – maintenance
Stopped: 0
允许 php、ses 等特权非交互命令
run [pwd | php -v]
001 + pwd
002 – php -v
    Command is not allowed in scripts
Stopped: 2
允许 php、ses 等特权非交互命令
run [pwd | php -v] -x -v
001 + pwd
    sandbox
002 + php -v
    PHP 8.4.24
Completed: 2
允许 php、ses 等特权非交互命令
run sandbox/scripts/privileged.lil
001 – php -v
    Command is not allowed in scripts
Stopped: 1
允许 php、ses 等特权非交互命令
run sandbox/scripts/privileged.lil -x -v
001 + php -v
    PHP 8.4.24
Completed: 1
仅验证并显示展开后的命令,不执行
run sandbox/scripts/invalid.lil -n
001 · pwd
Line 003 – Missing end
Stopped: 1
需要变量、条件、嵌套、capture 或其他流程逻辑时使用 run
run sandbox/scripts/recursive.lil
Recursive script detected
Stopped: 0
执行普通或打包的 .lil 脚本
run sandbox/scripts/blocked.lil
001 – @install find
    Automatic installation is not allowed in scripts
Stopped: 1
出错后继续;默认在第一次错误时停止
run sandbox/scripts/recover.lil -k
001 – upload
    Command is not allowed in scripts
002 + pwd
Stopped: 2
创建带校验和保护的打包脚本
run -p sandbox/scripts/workflow.lil sandbox/scripts/workflow.export.lil
Packed workflow.lil > sandbox/scripts/workflow.export.lil
182 B > 256 B
执行普通或打包的 .lil 脚本
run sandbox/scripts/workflow.packed.lil
001 + pwd
002 + pwd
Completed: 2
仅验证并显示展开后的命令,不执行
run sandbox/scripts/workflow.packed.lil -n
001 · pwd
002 · pwd
Checked: 2
执行普通或打包的 .lil 脚本
run [@install find]
001 – @install find
    Automatic installation is not allowed in scripts
Stopped: 1
执行普通或打包的 .lil 脚本
run [upload]
001 – upload
    Command is not allowed in scripts
Stopped: 1
执行普通或打包的 .lil 脚本
run sandbox/scripts/missing.lil
Script file not found
执行普通或打包的 .lil 脚本
run sandbox/data/sample.txt
Script must use the .lil extension
执行普通或打包的 .lil 脚本
run sandbox/scripts/workflow.lil -z
Unknown run option: -z
执行内联脚本;未加引号的 | 用于分隔语句
run [pwd
Inline script is missing ]
执行普通或打包的 .lil 脚本
run
?

本示例使用的文件: sandbox/scripts/demo.lil

该示例使用受保护的 /sandbox/ 文档工作区中的文件或目录。

# lil-sandbox workflow
pwd
dir 1 sandbox
echo sandbox/data/sample.txt

相关文档

当前公开版本

v1.2.42026-11-01

生产级完善

run 的当前稳定版本。run 通过与交互式终端相同的命令执行路径运行 `.