最近在玩 hexo 这个博客框架,有个需求是,在本地用 MarkDown 编辑好文章,能够高效地在服务端发表。于是使用 Shell 写了以下脚本。

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

inputFile=$1
if [ ! -f $inputFile ]; then
echo "缺少文件"
exit
fi

shift

while echo $1 | grep ^- > /dev/null; do
eval $( echo $1 | sed 's/-//g' | tr -d '\012')=$2
shift
shift
done

fileName=`basename $inputFile`
path="/Users/fang/Workspace/Blog/trunk/hexo/$fileName"

# 第一行内容为 ## XXX,其中 XXX 为标题
first_line=`head -n 1 $inputFile`
title=${first_line#\#\# }

# 使用当前的时间作为发布时间
myDate=`date "+%Y-%m-%d %H:%M:%S"`

echo "title: $title" > $path
echo "date: $myDate" >> $path

# 命令行可接受 tags 参数
if [ ! -z $tags ]; then
echo "tags: $tags" >> $path
fi

echo "---" >> $path

# 将此前 .md 文件中第一行忽略
sed 1d $inputFile >> $path

scp $path xxx@xxxx.com:~/hexo/source/_posts

ssh xxx@xxxx.com "cd ~/hexo/; hexo generate -d"

用法

可以将以上脚本保存,并在 .bash_profile 中设置别名,比如命名为 _hexo

1
2
# 于是,发表本篇文章的命令为
_hexo ~/Blog/articles/publish-blog-by-shell.md -tags [Shell]