这是关于 Elvish 脚本的介绍页面,通过多个示例展示了 Elvish 脚本相比传统 Shell 的优势:
- jpg-to-png.elv:使用 GraphicsMagick 将当前目录下的所有.jpg 文件转换为.png 文件,Elvish 版本无需双引号包裹变量,使用
(str:trim-suffix $x.jpg)
替代${x%.jpg}
,无匹配文件时 Elvish 会抛出异常,默认会扩展为零元素,Elvish 语法更易读,此例未展示高级功能,但细节积累能使脚本开发和维护更易。 - update-servers-in-parallel.elv:展示如何并行对多个服务器执行更新命令,Elvish 中
peach
命令可并行调用函数处理列表中的每个元素,还可通过输出重定向处理并行命令的输出,传统 Shell 可通过后台任务实现类似效果,但需管理后台任务生命周期,也可使用外部命令如 GNU Parallel,Elvish 中数据结构可任意嵌套,能更自然地表达复杂工作流,且可将服务器定义移入 JSON 文件。 - Catching errors early:在终端交互中展示 Elvish 能早期捕获错误,如拼写错误的变量,会在按下 Enter 执行代码前指出错误位置,而传统 Shell 通常默认不将拼写错误的变量视为错误,会继续执行可能导致灾难性后果的命令,Elvish 的早期错误检查可帮助防止因简单拼写错误导致的错误,在脚本中也有多处进行错误检查并添加更多检查。
- Command failures:终端交互显示 Elvish 在命令失败时的行为,像传统 Shell 一样可使用
;
或换行连接多个命令,但如果任何命令以非零退出码失败,Elvish 默认会中止执行,这是异常处理机制的一部分,与传统 Shell 的set -e
机制类似但无其缺陷,这种早期中止行为对于脚本尤其是 CI/CD 脚本是更安全的默认设置,如一个包含多个命令的脚本,若其中一个命令失败,Elvish 会中止整个脚本,而传统 Shell 会继续执行后续命令。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。