はじめに
OS: Mac
みなさん、"sl"というコマンドはご存知でしょうか?ターミナル上で機関車を走らせられる素晴らしいコマンドです。気になる方は、"brew install sl"で入れられるのでぜひ。
さて、私はこの特に益のない、むしろ邪魔になるコマンドを知って1つの思いが湧き上がってきました。
僕も自分のコマンド作ってみたい!!
別に益のあるコマンドじゃなくていいんです。使えるコマンドなんて世の中に調べれば出てきますし。だから、作るのは自分が楽しんで作れるもの。猫にしました。
作りたいもの
入力テキストを猫語に翻訳する(猫の語尾にする)コマンドを作ります。要件は以下の通りです。
- 「。」の前に「にゃ」をつける
ただし、直前が「な」か「ナ」の場合はつけない。 - 「な」を「にゃ」に書き換える
- 「ナ」を「ニャ」に書き換える
例はこんな感じです。
↓
例はこんにゃ感じですにゃ。
可愛い。すごく作りたくなってきました。
コーディング
#!/bin/sh
#パイプラインからも渡せるように
if [ -p /dev/stdin ] || [ -f /dev/stdin ]; then
src=`cat -`
else
src=$1
fi
src=${src// /_}
flag=true
for s in ${src}; do
out=""
for ((i=0; i<${#s}; i++)); do
x=${s:$i:1}
if [ ${x} = "_" ]; then
out+=" "
elif [ ${x} = "な" ]; then
out+="にゃ"
flag=false
elif [ ${x} = "ナ" ]; then
out+="ニャ"
flag=false
elif [ ${x} = "。" ]; then
if "${flag}"; then
out+="にゃ。"
else
out+="。"
flag=true
fi
else
out+=${x}
flag=true
fi
done
echo "${out}"
done
こんな感じで書けました。
ホームディレクトリにcommandというディレクトリを作ってそのなかに作成しました。
ファイル名は、作りたいコマンド名(今回は"nekogo")で、拡張子は付けません。ただし、最初の行に#!/bin/sh
と書く必要があります。
最初のifのところは、標準入力だけじゃなくて、パイプラインによる引き渡しとファイル入力に対応するためのものです。
あんまりShell Script書いたことないので、変なところあったら指摘お願いします。
テスト
とりあえずちゃんと動くかテスト。この時点ではまだコマンドになっていないので、普通のbashファイルと同様に実行して試します。
$ bash nekogo 例はこんな感じです。
例はこんにゃ感じですにゃ。
ちゃんと動いてくれました。
それではこれをコマンドにしていきましょう。
コマンド化
まず、このファイルに権限を与えます。
chmodを実行しましょう。
$chmod 777 nekogo
これで、$nekogo 入力テキスト
で実行できるようになりました。
次に、パスを通して、どこからでも実行できるようにします。
~/.bashrcに以下を追記しましょう。
export PATH=$HOME/command:$PATH
これで、どこからでもこのコマンドを使えるようになりました。
実行
コマンドが作れたので、早速使ってみましょう。せっかくなので、ファイルを受け取って翻訳することにします。
使うファイルはこれです。「吾輩は猫である」の最初のところです。
吾輩は猫である。名前はまだない。
どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
実行します。
$nekogo < test.txt
吾輩は猫であるにゃ。名前はまだにゃいにゃ。
どこで生れたかとんと見当がつかぬにゃ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶しているにゃ。
上手くいきましたにゃ。
nekogo < まとめ
猫語翻訳コマンドを作ってみましたにゃ。
翻訳といっても簡素にゃものですが、すごく楽しかったですにゃ。やっぱりやりたいことをやるのが一番にゃ。
参考文献