UNIXのおみくじコマンド
fortuneコマンドは、実行すると、あらかじめ用意された気の利いた文句や冗談、偉人の名言などの中から一文をランダムに表示するコマンドだ。オリジナルのfortuneコマンドは、ランダムで面白い文章を結果として出力する事から、昔からUNIXユーザの間で親しまれてきた「おみくじ」、最近の流行で言うと、組み合わせた文章を表示させる事こそ出来ないが「診断メーカー」のような存在と言ってもよさそうだ。
特に利用目的に制限はないのだが、通常、fortune コマンドはシステムへのログイン時に実行される。以下は、私の Debian サーバにログインした時の出力例である。
Using username "user".
user@example.com's password:
Linux alice 2.6.25.1-kuroboxHG #9 Sun May 4 21:29:57 JST 2008 ppc GNU/Linux
Last login: Fri Apr 23 09:01:54 2010 from 210.226.XXX.XXX
「再帰」を定義するには、我々は最初に「再帰」を定義しなければならない。
user@alice:~$
MOTD の次に fortuneコ マンドによるメッセージが表示される。表示させるメッセージ集は、様々なところで公開・配布されている。大半が英語なので、自分の場合は「コンピュータ・ジョーク」や「真・コンピュータ用語辞典」の冗談を中心に借用している。
フォーチュン・クッキー
このコマンドに関する海外の文献では、「fortuneコマンドの元となったのは中華料理店で出されているフォーチュン・クッキーである」と、書かれている事が多い。それらの邦訳であっても、大抵の場合直訳であって、それ以上の事は書いていない為、我々日本人も「フォーチュン・クッキーとは、中国の焼き菓子なのかあ・・・」なんて考えてしまいそうだ。しかし、そのルーツは中国ではなく日本にあった。Wikipedia のフォーチュン・クッキーの項目には以下のような記述がある。
フォーチュン・クッキー (fortune cookie) とは、中に運勢の書かれた紙片の入った菓子である。アメリカ合衆国・カナダの中華料理店では殆どの店で食後に出される。
日本の北陸地方の神社で新年の祝いとして配られていた辻占煎餅に由来するもので、形は辻占煎餅そのままである。
1894年、サンフランシスコのゴールデン・ゲート・パークで開催された国際見本市(California Midwinter International Exposition)で、日本庭園を設計し、運営していた萩原は、煎餅(英語ではJapanese cookieという)を二つ折りにしてその中に言葉を書いた紙を入れたものを、店を訪れる客にお茶請けとして出した。幾つかの中華料理店がこの煎餅を取り入れ、フォーチュン・クッキーは非常に一般的なものとなった。現在では多くの飲食店で、食事後の口直しとしてフォーチュン・クッキーが出されるようになった。
上記の様な経緯から、中国の習慣であると誤認しているアメリカ人も少なくない。しかし中国ではフォーチュン・クッキー自体知られていない。
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%81%E3%83%A5%E3%83%B3%E3%83%BB%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC
北陸のおみくじ煎餅が100年以上前に海を渡り、北米ローカルの中華料理店のメニューとなり、さらにはUNIXコマンドのひとつとなっていたのである。ちなみに日本国内でも、辻占煎餅よりも逆輸入されてきたフォーチュン・クッキーの方が流通しているようだ。面白いなあ。
シェルスクリプトで
そんな fortune コマンドだが、実行している内容は非常に単純で、「指定されたファイルからランダムに文章を選び、標準出力に表示する」だけであるため、わざわざパッケージマネージャの世話にならずとも、シェルスクリプトで自分で書くことができる。以下のスクリプトを書いた。
btune.sh
#!/bin/bash
sed -n $(( $RANDOM % $( wc -l &< $1 ) + 1 ))p $1
RAMDOM 変数やシェル展開数式を利用している為、bash 専用のスクリプトとなる。sed でランダムな1行を抽出している。
実行は以下のようにメッセージファイルを指定するだけだ。
$ ./btune.sh ~/.btune
機械エンジニアは兵器を作るが、その他のエンジニアはターゲットを作る。
これを /etc/profile.d や .bashrc に実行するよう記載しておけば、 fortune と変わらな挙動をする。
メッセージの追加も
$ cat >> ~/.btune
ざわ・・・ ざわ・・・
$
で済む。さらに、スクリプトファイルを置くのもイヤだという方は、\!* を駆使して alias 化しておくのもいい。また、/dev/random を上手く使えば、シェルに依存しないスクリプトが書けると思う。
※ 2020/07/02 度重なるブログ移転・ブログシステムのアップデートにより崩れた記事を校正。
※ 2024/06/25 コードブロックを修正。
[…] fortuneコマンドについての雑記 […]