hexo博客相关一键脚本

生成新博客文章

生成,并要求用户在命令行里输入文章名称,以及tag(用空格隔开)

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash

# --- 配置部分 ---
BLOG_PATH="/Users/jf/blog"
# ----------------

# 加载环境变量
if [ -f ~/.zshrc ]; then
source ~/.zshrc
elif [ -f ~/.bash_profile ]; then
source ~/.bash_profile
fi

echo "========================================"
echo " 正在进入博客目录: $BLOG_PATH"
echo "========================================"

cd "$BLOG_PATH" || { echo "❌ 路径不存在"; read -p "按回车退出..."; exit 1; }

# 1. 输入标题
echo ""
echo "请输入新文章的标题:"
read -p "📝 Title > " POST_TITLE

if [ -z "$POST_TITLE" ]; then
echo "❌ 标题不能为空!窗口即将关闭。"
sleep 2
osascript -e 'tell application "Terminal" to close front window' & exit
fi

# 2. 输入标签 (支持空格分隔)
echo ""
echo "请输入标签 (多个标签用空格隔开,例如: hexo mac 教程):"
read -p "🏷️ Tags > " POST_TAGS

# --- 执行 Hexo 命令并捕获输出 ---
echo "----------------------------------------"
echo "正在运行 hexo new..."
OUTPUT=$(hexo new "$POST_TITLE")
echo "$OUTPUT"
echo "----------------------------------------"

# --- 核心逻辑:自动修改文件 ---
if [ $? -eq 0 ]; then

# 路径提取逻辑:过滤出包含 'Created:' 的行,并提取最后一个字段
FILE_PATH=$(echo "$OUTPUT" | grep 'Created:' | awk '{print $NF}')
FILE_PATH=$(echo "$FILE_PATH" | xargs)

# <<<<<< 关键修正:展开 ~ 符号 >>>>>>
# 将变量中开头的 ~ 替换为实际的 HOME 路径,以确保文件检查正确
FILE_PATH="${FILE_PATH/\~/$HOME}"
# <<<<<< 修正结束 >>>>>>

if [ -f "$FILE_PATH" ]; then

if [ ! -z "$POST_TAGS" ]; then
echo "正在自动写入标签..."

# 转换标签格式 ([tag1, tag2])
FORMATTED_TAGS="${POST_TAGS// /, }"
FINAL_TAG_STR="[$FORMATTED_TAGS]"

# 使用 sed 命令替换文件中的 tags: 这一行
sed -i '' "s/^tags:.*/tags: $FINAL_TAG_STR/" "$FILE_PATH"

echo "✅ 标签已注入: $FINAL_TAG_STR"
else
echo "ℹ️ 未输入标签,跳过标签写入步骤。"
fi
else
# 理论上此错误修正后不应再出现
echo "⚠️ 未能找到生成的文件。请检查 Hexo 输出。"
fi
else
echo "❌ Hexo new 命令执行失败,请检查输出。"
fi

echo "----------------------------------------"
echo "🎉 操作全部完成!"
echo "窗口将在 2 秒后自动关闭..."
sleep 2
osascript -e 'tell application "Terminal" to close front window' & exit

更新博客内容

更新博客内容(Hexo n) 并Deploy(Hexo d),随后提示是否运行Server(hexo s),如是运行server命令并随后在chrome中打开 http://localhost:4000/

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash

# --- 配置部分 ---
BLOG_PATH="/Users/jf/blog"
# ----------------

# 加载环境变量
if [ -f ~/.zshrc ]; then
source ~/.zshrc
elif [ -f ~/.bash_profile ]; then
source ~/.bash_profile
fi

echo "========================================"
echo " 正在进入博客目录: $BLOG_PATH"
echo "========================================"

cd "$BLOG_PATH" || { echo "❌ 路径不存在"; read -p "按回车退出..."; exit 1; }

# 1. 输入标题
echo ""
echo "请输入新文章的标题:"
read -p "📝 Title > " POST_TITLE

if [ -z "$POST_TITLE" ]; then
echo "❌ 标题不能为空!窗口即将关闭。"
sleep 2
osascript -e 'tell application "Terminal" to close front window' & exit
fi

# 2. 输入标签 (支持空格分隔)
echo ""
echo "请输入标签 (多个标签用空格隔开,例如: hexo mac 教程):"
read -p "🏷️ Tags > " POST_TAGS

# --- 执行 Hexo 命令并捕获输出 ---
echo "----------------------------------------"
echo "正在运行 hexo new..."
OUTPUT=$(hexo new "$POST_TITLE")
echo "$OUTPUT"
echo "----------------------------------------"

# --- 核心逻辑:自动修改文件 ---
if [ $? -eq 0 ]; then

# 路径提取逻辑:过滤出包含 'Created:' 的行,并提取最后一个字段
FILE_PATH=$(echo "$OUTPUT" | grep 'Created:' | awk '{print $NF}')
FILE_PATH=$(echo "$FILE_PATH" | xargs)

# <<<<<< 关键修正:展开 ~ 符号 >>>>>>
# 将变量中开头的 ~ 替换为实际的 HOME 路径,以确保文件检查正确
FILE_PATH="${FILE_PATH/\~/$HOME}"
# <<<<<< 修正结束 >>>>>>

if [ -f "$FILE_PATH" ]; then

if [ ! -z "$POST_TAGS" ]; then
echo "正在自动写入标签..."

# 转换标签格式 ([tag1, tag2])
FORMATTED_TAGS="${POST_TAGS// /, }"
FINAL_TAG_STR="[$FORMATTED_TAGS]"

# 使用 sed 命令替换文件中的 tags: 这一行
sed -i '' "s/^tags:.*/tags: $FINAL_TAG_STR/" "$FILE_PATH"

echo "✅ 标签已注入: $FINAL_TAG_STR"
else
echo "ℹ️ 未输入标签,跳过标签写入步骤。"
fi
else
# 理论上此错误修正后不应再出现
echo "⚠️ 未能找到生成的文件。请检查 Hexo 输出。"
fi
else
echo "❌ Hexo new 命令执行失败,请检查输出。"
fi

echo "----------------------------------------"
echo "🎉 操作全部完成!"
echo "窗口将在 2 秒后自动关闭..."
sleep 2
osascript -e 'tell application "Terminal" to close front window' & exit