feat: evolve textfx into a mini shell

This commit is contained in:
2026-03-14 23:35:29 +08:00
parent 00f42dbdf1
commit 1331f8f893
6 changed files with 915 additions and 246 deletions

View File

@ -31,7 +31,16 @@
- 用 `|` 连接多个操作,前一个的输出自动作为后一个的输入。
- 用 `;` 分隔多条独立指令,它们各自产生输出,最终合并显示。
- 用 `>` `>>` 把结果保存起来(见下文),被重定向的指令不会产生输出。
- 用 `&&` / `||` 做最小 shell 风格条件执行:
- `cmd1 && cmd2`:仅当 `cmd1` 成功时执行 `cmd2`
- `cmd1 || cmd2`:仅当 `cmd1` 失败时执行 `cmd2`
- 用 `!` 对一条 pipeline 的成功/失败取反。
- 支持最小 bash-like `if ... then ... else ... fi` 语句。
- 支持最小 bash-like `while ... do ... done` 循环。
- 可使用内建真假命令:`true` / `false`。
- 为避免滥用与卡死:
- 同一用户同时只能运行 **一个** textfx 脚本
- 单个脚本最长执行时间为 **60 秒**
**例子**:把"HELLO"先反转,再转成摩斯电码:(转换为摩斯电码功能暂未实现)
```
@ -39,6 +48,36 @@ textfx reverse HELLO | morse en
```
→ 输出:`--- .-.. .-.. . ....`
**例子**:失败后兜底执行:
```
textfx test a = b || echo 不相等
```
→ 输出:`不相等`
**例子**:成功后继续执行:
```
textfx [ 2 -gt 1 ] && echo 条件成立
```
→ 输出:`条件成立`
**例子**:真正的 if 语句:
```
textfx if test a = b; then echo yes; else echo no; fi
```
→ 输出:`no`
**例子**:对条件取反:
```
textfx ! test a = b && echo 条件不成立
```
→ 输出:`条件不成立`
**例子**while 循环:
```
textfx while false; do echo 不会执行; done
```
→ 输出为空
**例子**:多条指令各自输出:
```
textfx echo 你好; echo 世界
@ -132,6 +171,51 @@ Base64 编码或解码。
> 缓存仅在当前对话中有效,重启后清空。
### true / false / test / [
最小 shell 风格条件命令。通常配合 `if`、`&&`、`||`、`!` 使用。
支持:
- `true`:总是成功
- `false`:总是失败
- 字符串非空:`test foo`
- `-n` / `-z``test -n foo`、`test -z ""`
- 字符串比较:`test a = a`、`test a != b`
- 整数比较:`test 2 -gt 1`、`test 3 -le 5`
- 方括号别名:`[ 2 -gt 1 ]`
示例:
- `/textfx true && echo 一定执行`
- `/textfx false || echo 兜底执行`
- `/textfx test hello && echo 有内容`
- `/textfx test a = b || echo 不相等`
- `/textfx [ 3 -ge 2 ] && echo yes`
### if / then / else / fi
支持最小 bash-like 条件语句。
示例:
- `/textfx if test a = a; then echo yes; else echo no; fi`
- `/textfx if [ 2 -gt 1 ]; then echo 成立; fi`
- `/textfx if test a = a; then if test b = c; then echo x; else echo y; fi; fi`
说明:
- `if` 后面跟一个条件链,可配合 `test`、`[`、`!`、`&&`、`||`
- `then` 和 `else` 后面都可以写多条以 `;` 分隔的 textfx 语句
- `else` 可省略
### while / do / done
支持最小 bash-like 循环语句。
示例:
- `/textfx while false; do echo 不会执行; done`
- `/textfx while ! false; do false; done`
- `/textfx while ! false; do if true; then false; fi; done`
说明:
- `while` 后面跟一个条件链,返回成功就继续循环
- `do` 后面可写多条以 `;` 分隔的 textfx 语句
- 为避免 bot 死循环,内置最大循环次数限制;超限会报错
### replace或 替换、sed
替换文字(支持正则表达式)。
示例(普通):`/textfx replace 世界 宇宙 你好世界` → `你好宇宙`