以前、PQI Air Card でも動く簡易 Wiki を書いてみました。PQI Air Card 自体、標準で Perl が動いていますし実用性はあんまりないですが、シェルスクリプトベースでも簡単に出来てしまいます。
wiki.sh
メインスクリプトです。
#!/bin/bash
dir=p
#BASENAME="/mnt/sd/DCIM/122_TREK/busybox basename"
BASENAME="basename"
tmp=`$BASENAME $QUERY_STRING`
page=${tmp:-index}
if [ "$REQUEST_METHOD" = "POST" ]; then
read text
echo "$text" | sed -f www.sed > $dir/$page
fi
if [ -f $dir/$page ]; then
body=`cat $dir/$page`
else
body='This is new page.
Please write body and push the save button.'
fi
title=`echo "$page" | sed 's/_/ /g'`
cat<<EOF
Content-Type: text/html
<TITLE>$title - Wiki</TITLE>
<H1>$title</H1>
<HR>
<H2>CONTENT:</H2>
<PRE>
$body
</PRE>
<HR>
<H2>EDITOR:</H2>
<FORM action=wiki.sh?$page method=post>
<TEXTAREA cols=60 rows=7 name=text>$body</TEXTAREA>
<INPUT type=submit value=SAVE></FORM>
EOF
cat<<EOF
<HR>
<H2>PAGE LIST:</H2>
EOF
for item in `ls $dir`;
do
echo "<dt><a href=wiki.sh?$item>" $item "</a>"
done
echo "<HR>"
echo "my wiki system by dyama <dyama@member.fsf.org>"
www.sed
URL文字列デコード用 sed ファイル。
#!/bin/sed
s/^text=//
s/+/ /g
s/%0D%0A/\n/g
s/%0A/\n/g
s/%0D/\n/g
s/%21/!/g
s/%3F/?/g
s/%2B/+/g
s/%3D/=/g
s/%7C/|/g
s/%23/#/g
s/%24/$/g
s/%5E/^/g
s/%26/\&/g
s/%28/(/g
s/%29/)/g
s/%5C/\\/g
s/%60/`/g
s/%7E/~/g
s/%5B/[/g
s/%5D/]/g
s/%7B/{/g
s/%7D/}/g
s/%3B/;/g
s/%27/'/g
s/%3A/:/g
s/%22/"/g
s/%3C/</g
s/%3E/>/g
s/%2C/,/g
s/%2F/\//g
s/%09/\t/g
s/%25/%/g
wiki.sh に +rx して、ページ保存用のディレクトリ「./p」を 777 で作成し、wiki.sh にアクセスすると次のように表示されます。
新規ページを作成するには、URL文字列に?pagename
をつけてアクセスします。wiki.sh の URL がhttp://localhost/wiki.sh
の場合、http://localhost/wiki.sh?pagename
になります。 ページの削除機能はないので、端末からログインして、ディレクトリ p 以下の対象ファイルを削除すればOKです。
また、SVN などに噛ませてページの更新時毎にディレクトリ p 以下をコミットしてやれば、ヒストリー機能も実現できそうです。楽チンですね。