先前在windows阵营的时候,我写了一个python的脚本,编译成了exe,来自动执行git三板斧的命令,push我的hexo博客修改到远端仓库,由vercel和netlify的cicd自动执行hexo部署操作。

在mac这边,由于终端本身是一个zsh,也有bash,所以我们可以直接编写一个bash脚本来处理这些事。

win那边虽然也有bat脚本,但当时我的测试中发现bat脚本没有办法执行hexo g的操作,会在弹出终端之后立马停止执行,不清楚为何。

在这里分享一下这个脚本,功能非常简单,就是本地先执行hexo cl && hexo g的操作,再判断是否有新的变动,如果有,则提交到远端。

这里执行hexo g是因为我的博客使用了固定URL的插件,需要本地生成一个固定的URL的ID到MD文件的front-matter里面,再push到远端。如果直接push到远端,那么同一个MD文件在vercel或netlify可能会被生成出不同的固定ID,到时候博文链接就不一样了,不符合我们博客的使用预期。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
dir="/Users/yangkeliu/data/hexo/blog"
# 进入目标目录
cd $dir
echo "[run] cd $dir"
# 生成id
hexo cl && hexo g --d;
sleep 1;
# 提交git仓库
echo "[run] begin git push";
# 检查是否有内容需要提交
if [[ -n $(git status --porcelain) ]]; then
# 获取当前日期时间
current_time=$(date "+%Y-%m-%d %H:%M:%S")
commit_msg="auto update at ${current_time}"
echo "[run] $current_time"
echo "[run] $commit_msg"
git add --all;
git commit -m "$commit_msg";
git push;
echo "[run] success push to remote"
else
echo "[run] nothing to commit"
fi
echo "[run] end git push";

当没有可提交信息的时候,脚本不会执行git add等操作,只有有提交信息的时候才会自动提交。

image.png

关于此脚本,有任何问题,欢迎在评论区提出。