shell脚本中的错误处理方式为脚本添加错误后的执行
shell脚本中的错误处理方式为脚本添加错误后的执行
事故原因
今天在执行同步脚本时发现scp发送文件完成后,竟然返回错误码导致脚本未执行完成,我打开obsidian后等很久都无法打开界面,查找原因后是obsidian会去加载node_modules文件夹,这可捅了马蜂窝了,CPU被大量占用,风扇直接呜呜的响。
做过前端开发的都知道node_modules
文件夹存放了大量的前端依赖文件,动则几百兆的琐碎代码文件是真的恼火,我在Obsidian的设置中设置排除node_modules文件夹没用,所以直接在脚本中设置隐藏文件夹,将node_modules
重命名为.node_modules
。
解决办法
之前因为是顺序执行报错不执行就可以了所以在脚本中添加set -e
现在多了重命名文件夹和恢复文件名的操作就必须设置错误处理命令,在执行错误后将文件夹名称恢复。设置trap
命令后面跟执行错误处理方法,示例如下:
#!bin/bash
set -e
# shell script 中的 function
ErrorHandling () {
if [ $? -ne 0 ]
then
echo "执行失败"
fi
}
# 报错后执行 ErrorHandling 错误处理方法
trap ErrorHandling EXIT
# 不存在 a.txt 文件
cp a.txt b.txt
obsidian同步和发布完整脚本
#!/bin/bash
echo "开始执行命令"
git add .
git status
#写个sleep 1s 是为了解决并发导致卡壳
sleep 1s
echo "####### 添加文件 #######"
time=$(date "+%Y-%m-%d %H:%M:%S")
git commit -m "$time"
echo "####### commit #######"
sleep 1s
echo "####### 开始拉取 #######"
git pull -r
echo "####### 拉取成功 #######"
echo "####### 开始推送 #######"
git push origin master
echo "####### 推送成功 #######"
# 设置错误中断执行
set -e
pub="publish"
# shell script 中的 function
ErrorHandling () {
if [ $? -ne 0 ]
then
mv node_modules .node_modules
mv scaffolds .scaffolds
echo "執行失敗"
fi
}
trap ErrorHandling EXIT
if [ $pub = $1 ]
then
mv .node_modules node_modules
mv .scaffolds scaffolds
npm run clean
npm run build
scp -r public/* root@192.168.1.14:/usr/share/nginx/html
npm run clean
mv node_modules .node_modules
mv scaffolds .scaffolds
fi
标题:shell脚本中的错误处理方式为脚本添加错误后的执行
作者:haizhilingyu
地址:https://xiweihai.site/articles/2024/05/12/1715501578236.html