試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

おみくじや格言などをランダムに表示する

fortune-modというパッケージをインストールして、fortuneというコマンドを実行させると、英語で格言のようなもの(実際には格言以外もありそう)がランダムに表示される。
コマンド名からすると、おみくじをするという使い方がふさわしいような感じもするのだが、ランダム格言として使われるのが一般的のようだ。manページを見ても、「格言を無作為に表示」と書いてある。
(2015/1/12)manページなどのリンク先を修正

  1. 英語の状態で動作実験
  2. 日本語の格言データ
  3. テキストファイルの書式と例

英語の状態で動作実験

[引用]ランダムに実行した結果より

$ fortune
Absence makes the heart grow fonder -- of somebody else.
$ fortune
Universe, n.:
        The problem.
$ fortune
Fifteen men on a dead man's chest,
Yo-ho-ho and a bottle of rum!
Drink and the devil had done for the rest,
Yo-ho-ho and a bottle of rum!
                -- Stevenson, "Treasure Island"

3回ほど試してみたのだが、英語力が足りないのか、いまひとつ意味が分からない...

日本語の格言データ

worris' works - fortune - 日本語データ
から、「星が見える名言集」という名言集がダウンロードできる(他のファイルもあるので、試してみるのもよい)。ファイルを展開すると、meigenというテキストファイルとmeigen.datという「ランダムアクセスファイル」が得られる。
これらはEUC-JPのエンコーディングのため、UTF-8環境においては、meigenUTF-8エンコーディングに変換後、strfileで.datファイルを作成し、

$ mv meigen meigen.eucjp
$ iconv -f eucjp -t utf8 meigen.eucjp > meigen
$ strfile meigen
"meigen.dat" created
There were 768 strings
Longest string: 2764 bytes
Shortest string: 1 byte

これら(meigenmeigen.dat)のあるディレクトリで下のように実行すると、このファイルが使用される。
[引用]「星が見える名言集」日本語データより

$ fortune meigen
教育とは、学校で習ったすべてのことを忘れてしまった後に、自分の中に残るものをいう。
そして、その力を社会が直面する諸問題の解決に役立たせるべく、
自ら考え行動できる人間をつくること、それが教育の目的といえよう。
                --アルバート・アインシュタイン
$ fortune meigen
悪いことを考えながらよい結果を得ることはできません。
それはちょうど良いことを考えて悪いことができないのと同様です。
                --マーフィー
$ fortune meigen
教師の側から知識を授けるよりも、
まず知識をもとめる動機を子どもたちがもつような学校が、真の学校である。
                --デューイ
$ fortune meigen
もし君が人に愛されようと思うなら、まず君が人を愛せよ。
                --セネカ

やはり、日本語だと、書いてあることが伝わりやすい。ただ、中には、意味の分かりにくいものや、説教臭いもの、押し付けのようなものなどもあり、[ホームディレクトリ]/.bashrcのような、シェル初期化スクリプトに書いたりするのには抵抗がある。やり方としては、[ホームディレクトリ]/fortune/というディレクトリを作成し、その中にmeigenmeigen.datの両方を入れ、

$ mkdir ~/fortune
$ mv meigen meigen.dat ~/fortune/

シェルの初期化スクリプトの最後に以下を書くような形となる。
ファイル名: ~/.bashrc など

fortune ~/fortune/meigen

ダウンロードしたファイルは、/usr/share/fortune/*1など(ディストリによって異なり、/usr/share/games/fortunes/の場合もある)にコピーすることで、既存のファイルに追加することもできそうだが、パッケージ管理システムの管轄内なので、あまり推奨はできない。

テキストファイルの書式と例

項目の区切りに「%」のみの行を書くだけ。日本語を含む場合はエンコーディングに注意。
[任意]ファイル名: omikuji

大凶
%
凶
%
末吉
%
吉
%
小吉
%
中吉
%
大吉

これをstrfileにかけてfortuneコマンドを実行すると、簡易おみくじができる。

*1:これはGentoo Linuxの場合の場所