测验:健壮的脚本
在仅启用 set -e 的脚本中,curl URL | jq。 |使用 wc -l 卷曲失败。剧本呢?
- 立即结束
- jq 退出并出现错误
- 它还在继续。因为管道状态来自最后一个命令。
- 卷曲自动重试
使用陷阱清理 EXIT 时,rc=$?在处理程序的第一行。为什么要保存?
- 在处理程序 $? 内因为如果你使用的话会出现语法错误
- 因为 EXIT 陷阱无法接收退出代码。
- 因为它和set -e冲突
- 处理程序内的命令是 $?这是因为原始退出代码通过覆盖而消失。
应使用 mktemp 创建临时文件的最准确原因是什么?
- 这是因为文件名短,性能好。
- 因为它是自动删除的,没有陷阱。
- 这可以防止并发执行冲突和针对可预测名称的攻击。
- 这是因为无法在 /tmp 之外创建临时文件。
每 5 分钟运行一次的 cron 作业开始需要 6 分钟。封锁期间你应该做什么?
- 通知“已在运行,已跳过”作为区分其与失败的退出代码。
- 将运行周期缩短至 1 分钟
- 在您的主目录而不是 /tmp 中创建锁定文件
- 导致第二次执行终止第一次执行
重试逻辑必须检查哪些前提?
- 命令足够快吗?
- 该任务可以安全地运行多次(幂等)吗?
- 这是网络操作吗?
- 退出代码是1吗?
set -u 可防止哪些典型事故?
- 诸如 rm -rf "$DIR"/ 之类的命令行为不稳定,因为由于变量名称中的拼写错误而传递了空字符串。
- 即使管道中的中间命令失败,整个管道也会成功。
- 脚本终止时留下的临时文件
- 同一个脚本同时运行并崩溃