遇到的问题
1、更新 hexo 时指令太多
自从使用了 hexo 搭建博客,每次更新网站都需要 hexo clean
、hexo g
、hexo d
三连,着实麻烦,如果能够连续执行这几个指令就好了,在网上一查正好找到了解决方案。
2、hexo—douban 插件小 bug
在新版本中似乎已经解决
该插件生成的页面在 iOS、macOS 平台的浏览器中被「防盗链」了,导致无法显示书籍、电影的封面。
在 issue 里面有人建议在生成的 index.html 文件中 head 部分增加 <meta name="referrer" content="no-referrer">
这一行代码,实测有效。
但总不能每次生成后都一个个打开文件去添加吧,太麻烦了,今天突然想到可以直接用 c++ 读写文件的操作来实现自动添加。
解决
hexo
在目录下创建一个 .sh
文件,在这个文件中,一行一行地添加你想要顺序执行的语句,如下:
cd /Users/root/blog # 进入hexo本地目录
hexo clean
hexo g -d
保存,关闭,使用 chmod 指令给这个文件增加“可执行”权限后即可。
大功告成。
在你想要更新网站时,只需把上面的这个文件拖入终端,按下回车,它会自动执行里面的每一行命令。
douban
学了那么久的 c++,平时解决实际问题却用的很少,今天终于派上用场了。
使用 fstream 读写文件。
代码如下:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
string str;
ifstream fin;
fin.open("/Users/root/blog/public/books/index.html", ios::in);
stringstream buf;
buf << fin.rdbuf();
str = buf.str();//读出该文件内所有内容,存储在str中
fin.close();
str.insert(59,"<meta name=\"referrer\" content=\"no-referrer\">");//在str的对应位置(head部分的开头),插入修复的代码
ofstream fout("/Users/root/blog/public/books/index.html", ios::trunc);
fout << str;//trunc表示覆盖写入原文件
fout.close();
return 0;
}
这一段代码跑完,就会在特定文件的特定位置插入特定字符串,正是我们需要做的。
使用 gcc 工具生成可执行文件,或者直接使用开发环境已经生成的可执行文件,放在一个合适的位置(比如说放在 sh 脚本同一个文件夹下面)
注意,豆瓣插件会生成 books、movies、games 三个页面,所有修改上面的代码,最后得到三个可执行文件,分别是 hexo_movies
、hexo_books
、hexo_games
接下来,只需要把 sh 文件内容修改为:
cd /Users/root/blog
hexo clean
hexo g
# 进入 hexo 本地目录,clean、g。hexo g 操作中应包含 hexo douban 操作
# 这时生成的电影书籍游戏页面文件中,是缺少 <meta name=\"referrer\" content=\"no-referrer\">这行代码的
cd /Users/root/sh # 进入存放三个可执行文件的文件夹
./hexo_movies
./hexo_games
./hexo_books # 执行这个三个程序
cd /Users/root/blog # 返回 hexo 目录
hexo deploy # 部署。注意这里不能用 hexo d,因为 hexo deploy 和 hexo douban 名字冲突了。
大功告成。
以后更新,只需要把这个 sh 文件拖入终端,按下回车。