Start My SimpleHTTPServer

近頃、ライブラリのドキュメントや言語のリファレンスがgithub.ioで公開され、htmlファイル等もgithub上でメンテされています。そのため、じっくり読みたいものに関してはローカルにクローンしLAN上で読んでいます。当初は常に立ち上げているApacheのDocumentRootにエイリアスをつなげていたのですが、confの編集がめんどくさいので、結局ローカルリポジトリでpython -m SimpleHTTPServerとしてしまいました。今度はディレクトリを忘れる、移動がめんどくさい等の問題があり、gem serverのようなコマンドとすれば、補完もきくし良いだろうと思い以下を書きました。

#!/bin/bash

DOCROOT=
DEFAULT_PORT=8000
SERVER="python -m SimpleHTTPServer"

PORT=
if [[ $1 =~ ^[0-9]+$ ]]
then
    PORT=$1
elif [[ -z $1 ]]
then
    PORT=$DEFAULT_PORT
else
    echo "Usage: $0 [port]"
    exit 0
fi

TEST="$(nc -z localhost $PORT 2>&1 | grep succeeded)"
if [[ -n $TEST ]]
then
    echo "Can't use address: localhost:$PORT"
    exit 1
fi

(
    for i in 1 2 3 4 5; do
        sleep 0.5
        TEST="$(nc -z localhost $PORT 2>&1 | grep succeeded)"
        if [[ -n $TEST ]]; then
            break
        fi
    done
    if [[ -n $TEST ]]; then
        open "http://localhost:$PORT/"
    fi
) &

cd $DOCROOT
$SERVER $PORT

サブシェルからページをブラウザで開くようにもしました。DOCROOTを設定し適当なコマンド名をつければ、どこからでも利用できます。(gist)