feat: evolve textfx into a mini shell
This commit is contained in:
@ -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 世界 宇宙 你好世界` → `你好宇宙`
|
||||
|
||||
Reference in New Issue
Block a user