今回は砂金とはまったく関係ない話題です…
fortuneコマンドとは
無機質な画面上におみくじを表示してくれる小粋なtoolです。外国人はこういうの好きなんですよね。Juniper社のnetwork OSである、JUNOSにもhaikuっていう隠しコマンドがあったりします。
最近の*BSDやLinux distributionには、packageが用意されていると思います。以下はdebianとCentOSですが、distributionによってはpackage名が異なるかもしれません。
1 2 3 4 |
% dpkg -l | grep -i fortune ii fortune-mod 1:1.99.1-7 amd64 provides fortune cookies on demand ii fortunes-min 1:1.99.1-7 all Data files containing selected fortune cookies |
1 2 3 4 5 |
$ yum search fortune Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile ============================================================================== N/S matched: fortune =============================================================================== fortune-mod.x86_64 : A program which will display a fortune |
なにも引数を付けずに実行するとこんな感じです。
1 2 3 4 5 |
% fortune In the first place, God made idiots; this was for practice; then he made school boards. -- Mark Twain |
fortuneの歴史
wikipediaによれば、Unix Version 7 (1979年!!)で動いていたそうです。
X Window Systemのリリースが1984年ですから、その当時のUIはもちろんCLI。現在のdisplayが出回り始めたのが1970年代中頃だそうですから、悪くすると行指向UIを使っているユーザもいたかもしれません(今でもedコマンドにその名残が伺えますね)
その後GUIが登場してfortuneの見せ方も多少変わってきました。が、基本は変わりません。昔のGNOMEには(今もあるのかな?)”Wanda the Fish”というPanel Applicationが付属していてクリックするとfortuneを表示してくれました。
※ 日本語訳は、さかなクンという名称になっていたような覚えがあります。
そんなわけで、今も昔と変わらず愛されているtoolなのです。
使い方
仕事につかれた時、なにかに行き詰まった時、そっと fortuneと打ってみましょう。クスっと笑える一言や心和むメッセージが返ってきます。
最近流行りの吹き出し表示ツール(cowsay)を通してあげればもっと楽しく。
※日本語だと吹き出しが崩れやすいので注意
ランダムに文章を返してくるtoolなので、応用範囲はとても広いです。
userのlogin shellが起動した時に実行されるスクリプト($HOME/.bashrc など)に以下のコードを仕込んでおけば….少し癒やされますよね。
1 2 3 4 5 6 7 8 9 10 11 |
# fortune if [ ! x${TERM} = "xdumb" ] ;then echo -e "\033[1;35m" echo '------------------------------------' echo '' # Pathは環境によって異なります /usr/games/fortune echo '' echo '------------------------------------' echo -e "\033[0m" fi |
slackbotなどに仕込むのも簡単
1 2 3 4 5 6 7 8 |
func GetFortune() (bool, string) { result, err := exec.Command("sh", "-c", "fortune my").Output() if err != nil { log.Print("Fortune exec error") return false, "" } return true, "```" + string(result) + "```" } |
独自ファイルを用意する
ネットを検索するとfortuneファイル集というのがいくつも見つかると思います。が、日本語ファイル集というのはなかなか見つかりません。
昔流行った、マーフィーの法則ファイル集を見かけたことがありますがソレくらいなので・・・自分で作ってしまいましょう!
fortuneの仕組み
細かな振る舞いなどは、コマンドバージョンによって異なってくると思いますが、大まかにはこのようなしくみになっています。
- ‘%’で区切られたファイルを用意する
- (1)のファイルからindexを作成
- 元になるテキストファイルとindexファイルを所定のディレクトリに配置
簡単ですね。
では、試しにファイルを作ってみましょう。ここで気をつけないといけないのが、
最後のプロックには’%’を付けないという所です。最後に’%’を付けると空行もindex化されてしまいます。
1 2 3 4 5 6 7 8 9 10 11 |
$ cat test カッコイイ国家 % アニマルマニア % 確かに貸した % 竹やぶ焼けた |
次にindexファイルを作成します
1 2 3 4 5 6 7 8 9 |
$ strfile test "test.dat" created There were 4 strings Longest string: 22 bytes Shortest string: 19 bytes $ ls -1 test test.dat |
作成された2つのファイル(test, test.dat)を所定のディレクトリにコピーします。この時、ディレクトリを作成する事で、このファイルのみを指定して表示させる事ができます。
※このpathは、環境によって異なる可能性があります
1 2 |
$ sudp mkdir -p /usr/share/games/fortunes/test/ $ sudo scp test* /usr/share/games/fortunes/test/ |
1 2 3 |
$ fortune -f test 100.00% /usr/share/games/fortunes/test 100.00% test |
今、作成したファイルを指定して表示させてみます。
1 2 3 4 5 6 7 8 9 10 |
$ fortune test 竹やぶ焼けた $ fortune test カッコイイ国家 $ fortune test 確かに貸した $ fortune test アニマルマニア $ fortune test 確かに貸した |
いい感じですね。
その次のステップへ
fortuneは、元ネタとなるデータが多ければ多いほど面白くなります。ネットを見ていて面白い!と感じたらすかさず追加しましょう。fortuneで指定できるのはディレクトリ単位ですが、ファイルを分ける事も可能なので、カテゴリ別に分け、配布する際にファイルを選べば全年齢対象なfortuneデータセットが完成です。
1 2 3 4 5 6 7 8 9 |
$ fortune -f test 100.00% /usr/share/games/fortunes/test 1.94% test 98.06% murphyjp $ fortune test Rudinの法則: 何等かの対応をとらねばならない危機的状況において、 ほとんどの人はとりうるもののなかで最悪の選択をしてしまう。 |
https://osdn.jp/projects/my-fortune/
ここの仕組みを使うと楽に管理できるかと思います。
configure && make && make install で一発deployできます
※ sudoersへの登録が必須
2chコピペが多いですが、配布する際、著作権には要注意です。
日本語の面白いfortuneファイルが登場する事を願ってます。
「fortune コマンドについて」への1件のフィードバック