アイキャッチ画像

シェルスクリプトでSphinxのビルドの前処理をする

bashのスクリプトで、Sphinx(ablog)のビルドの処理の際の前処理をしてみました。

環境はMacOSですが、Linuxでも同じだと思います。

目次

  1. 解決したい課題
  2. どう解決するか
  3. 拡張子を打ち込むのも面倒

解決したい課題

ブログ用にablogというSphinxベースのシステムを使っています。このablogはアップデートした部分だけをHTMLに変換してくれるという便利なものなのですが、どういうわけか特定のページだけは既存のHTMLが存在すると更新をしてくれなくなります。

Finderでいちいちファイルを削除してからビルドしているのですが、面倒なのでスクリプトにしてしまいました。

どうせreStructuredTextをHTMLに変換するときにシェルを使いますし。

どう解決するか

単純にファイルを削除するだけですので、bashのシェルスクリプトにしてしまいます。

#!/bin/bash
set -Ceu
rm -v ./_website/all_post/index.html
ablog build

1行目はシバンといって、スクリプトを実行するシェルを指定します。

2行目はbashのオプションです。Cはリダイレクト時の上書きを防止します。eはエラーが発生したときにスクリプトを停止します。uは存在しない変数がある場合にエラーにします。

今回はリダイレクトも変数も使いませんのでCとかuは不要ですが、こういうのは習慣にしておいた方が良いので。

このテキストファイルをローカルのブログのドキュメントルートにmymake.shという名前で保存します。

そして、実行件を付与します。

$ cd ドキュメントルートのディレクトリ
$ chmod +x mymake.sh

で、実行します。

$ cd ドキュメントルートのディレクトリ
$ ./mymake.sh
./_website/all_post/index.html
Running Sphinx v1.7.5
loading translations [ja]... done
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [dirhtml]: targets for 1 source files that are out of date
updating environment: 0 added, 0 changed, 0 removed
looking for now-outdated files... none found
preparing documents... done
writing output... [100%] index
generating indices... genindex
writing additional pages... search
copying static files... done
copying extra files... done
dumping search index in Japanese (code: ja) ... done
dumping object inventory... done
build succeeded.

The HTML pages are in _website.

こんな感じでrmの実行後にablogのスクリプトが実行されます。

ちなみに、rmのファイル名の指定が間違っていたり、初回のビルド(ablog cleanしたとか)やFinderでファイルを削除していたなどでファイルが存在しない場合は、このようにエラーを出力して停止します。

$ ./mymake.sh
rm: ./_website/all_post/index.html: No such file or directory

これでいちいちFinderを開かなくてもよくなりました。

拡張子を打ち込むのも面倒

テキストエディタがファイルの拡張子をみてファイルの種類を判断する場合がありますので、ファイルの末尾には.shを付けておきたい。

でも、スクリプトを実行するときに拡張子まで入力するのは面倒くさい。

ということで、シンボリックリンクを貼りました。エイリアスでも良いです。

$ cd ドキュメントルートのディレクトリ
$ ln -s /Users/xxxx/ドキュメントルート/mymake.sh ./mymake

こうすると、./mymakeでシェルスクリプトが実行されます。

広告

作ってみたカテゴリの投稿