一直觉得 octopress 虽然很简洁,很实用。但是管理起来很麻烦,尤其是写一篇博客就要进行很多次 rake,还需要对 git 进行管理。如果经常写博客的话,重复性操作很多,和商业博客服务比起来很是不方便。所以我一直希望能够写一个好用些的脚本,让这些工作自动进行。至少可以把用户的工作量减少到最少。
很久之前,当我还在本科的时候,我写过一些很简单的脚本,至少能够把「new _post」,「generate」以及预览效果这几个功能自动化控制,也能够把 git 的操作绑定在一条语句执行。不过当时我遇到一个问题。就是不知道该如何得到新生成的 post 的名称。用过的人都知道,那是一个把日期和汉语拼音结合在一起的东西,实在是难以模拟。当时的我还超级菜,就这么卡在了那里,凑了和好一阵子。后来慢慢地写博客少了,也就忘了这件事。现在刚好放假,而我又觉得自己似乎进步了不少。毕竟已经是研究生了嘛。:p 刚好又准备开始重新写博客。于是乎… 当然是就要「工欲善其事,必先利其器啦」。身为 cs 嫡系,要是连这点事都解决不了,还混个p啊。XD 于是乎,我开始从零开始解决这个问题。
首先我把目标确定到了 ruby 身上。现在 ruby 超级火啊。开源社区基本上都在用它。我也是对他垂涎许久了,这次有机会搞一搞,当然兴奋异常啦。于是乎,打开电脑,找最厚的教程,开始学习!结果看是看的差不多了… 但是对之前的问题还是没什么头绪。我搞明白了 ruby,人家是 rakefile 啊。细节上还是和标准语法不一样。比如那个【t, args】我就研究了半天… = = 新人伤不起啊。不过好在搞明白了。其实就是个参数的标准接口。无论你有多少参数都可以通过这两个参数表示出来。在我看来第一个「t」应该是 Object,而第二个 args 就是所有参数的集合。通过它可以直接调用其他所有的参数。之前看 rakefile 的时候,里面采用了’:title’,这个写法刚好和「stringex」这个 gem 的库里面某个调用的方法相同。所以… 我误会了… 汗… 害的我研究了半天如何应用 gem 和 stringex. 结果当然是毫无头绪了啊。不过现在总算是知道他们是什么东西了。gem 相当于是 ruby 的一个 package 的管理程序。也就相当于是 homebrew 这样类似功能的一个安装库的程序。但是怎么用似乎很复杂… 现在都不知道怎么用。而 stringex 顾名思义就是一个 string 的一个增强版。所以现在问题所在就是该如何使用。因为这也是 rakefile 的主要技术关键。于是乎我研究了半天看看 rakefile 是如何配置实现的。不过看了半天,他根本就没有配置,也没有调用什么的。那么我就想,为什么我就调用不了。为什么他就可以?于是乎我又开始检查他做了什么,而我没有做。这或许就是关键所在了。就这样我发现了 bundler 这个东西。原来是因为有 bundler 才能够实现自动调用 gem 的。bundler 的用处就是自动调用 gem 来帮助用户实现相关的功能,减少操作。从这个角度看起来 ruby 这是好东西啊。所有的东西都能够自动实现。包括数据类型的确定和转换。现在竟然连包都可以自动调用,还真是完全贯彻了 ruby 的中心思想啊。
然后我就好好的写了一下 bash 脚本。又有了新的收获。看着自己写的小程序变得像正规的 Unix 程序一样,还可以加参数了就觉得好兴奋啊。好了言归正传,现在我来讲讲我是如何实现这个问题的,以及我的代码是如何写的。
现在我们先来看看我的 bash 脚本。
OCTOPATH='/path/to/your/octopress'
case $1 in
-n) cd $OCTOPATH
git pull
FILEPATH=$(rake new_post["$2"] | grep -o 'source/_posts/.*')
# FILEPATH=$(~/Applications/Scripts/trnName.rb ["$2"])
# 只用bash就可以做到的事情,用什么ruby啊...= = 真是2...orzzz
pbpaste >> $OCTOPATH/$FILEPATH
rake generate
echo "Add New Entry Finished"
open http://octopress.dev
;;
-N) cd $OCTOPATH
git pull
FILEPATH=$(rake new_post["$2"] | grep -o 'source/_posts/.*')
open $OCTOPATH/$FILEPATH
;;
-g) cd $OCTOPATH
rake generate
open http://octopress.dev
;;
-p) cd $OCTOPATH
rake deploy
git add .
git commit
git push origin source
echo "Finished GIT Update"
open http://scorpiohw.github.io
;;
esac
我写了一个小的脚本来实现几个功能。首先也是最重要的就是创建新的文件。实际上一个标准的用户操作是需要多次修改的。而我本人也的确是经常发布之后才发觉原来还有新的地方需要调整。所以我将 deploy 和 generate 分开。这样可以在本地调试好之后再真正的发布到服务器上。也可以达到最佳的使用效果。当然,不是所有时候都需要在创建的时候加入写好的文字。所以我又加入了新的功能,只创建新的文件。然后就是生成功能。因为存在创建空白文件的功能,所以如果继续和 generate 绑定的话,就毫无价值啦。所以肯定要把这个功能分离。当然另外一点是我很懒啦,一个脚本能够完成越多的内容越好,我需要做的事情越少越好。这就是我的原则啦。最后一项功能就是 deploy 了。很简单吧?
好啦,这就是我的脚本啦。你喜欢的话可以直接拿去使用哦~不客气~快乐在于分享嘛~XD