fortuneコマンドについての雑記

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コ マンドによるメッセージが表示される。表示させるメッセージ集は、様々なところで公開・配布されている。大半が英語なので、自分の場合は「コンピュータ・ジョーク」や「真・コンピュータ用語辞典」の冗談を中心に借用している。

フォーチュン・クッキー

f:id:dyama:20100423105010j:image:right

このコマンドに関する海外の文献では、「fortuneコマンドの元となったのは中華料理店で出されているフォーチュン・クッキーである」と、書かれている事が多い。それらの邦訳であっても、大抵の場合直訳であって、それ以上の事は書いていない為、我々日本人も「フォーチュン・クッキーとは、中国の焼き菓子なのかあ・・・」なんて考えてしまいそうだ。しかし、そのルーツは中国ではなく日本にあった。Wikipedia のフォーチュン・クッキーの項目には以下のような記述がある。

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コマンドについての雑記」への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください