自動テストの一部が00:30に実行されると失敗することに気づきましたが、残りの時間は問題なく動作します。 stderrで「gimme gimme gimme」というメッセージが表示されて失敗しましたが、これは予期されていませんでした。なぜこの出力が得られるのですか?
これはman
のイースターエッグです。ページを指定せずに、または-w
を使用してman
を実行すると、00:30にのみ "gimme gimme gimme"がstderrに出力されます。
# date +%T -s "00:30:00"
00:30:00
# man -w
gimme gimme gimme
/usr/local/share/man:/usr/share/man:/usr/man
終了コードは常に0です。
正しい出力は常に次のようになります。
# man -w
/usr/local/share/man:/usr/share/man:/usr/man
# echo $?
0
# man
What manual page do you want?
# echo $?
1
文字列「gimme gimme gimme」は、RHEL、OpenSUSE、Fedora、Debianなどで見つかる可能性があるため、実際にはディストリビューション固有ではありません。 grep
man
バイナリを検証して確認できます。
このコードは出力を担当します 、追加 このコミット :
src/man.c-1167- if (first_arg == argc) {
src/man.c-1168- /*
http://Twitter.com/#!/marnanel/status/132280557190119424 */
src/man.c-1169- time_t now = time (NULL);
src/man.c-1170- struct tm *localnow = localtime (&now);
src/man.c-1171- if (localnow &&
src/man.c-1172- localnow->tm_hour == 0 && localnow->tm_min == 30)
src/man.c:1173: fprintf (stderr, "gimme gimme gimme\n");
この問題についてRHELサポートに連絡しました。
文字列はよく知られている ABBAの歌Gimme!Gimme!Gimme!(A Man After Midnight) から来ています。
Man-dbの開発者であるColin Watsonは、十分な楽しみがあり、物語は忘れられないだろうと決定し、 イースターエッグを完全に削除 しました。
コリンありがとう!
@ colmmacuait 様、0001時間に「man」と入力すると、「gimme gimme gimme」と出力されます。 #abba
@ marnanel-2011年11月3日
ええ、それは私のせいだったので、私はそれを提案しました。ごめんなさい。
ほとんどすべての話がコミットにあります。人間のメンテナは私の良き友人であり、6年前のある日、真夜中に人間を呼び出すと「gimme gimme gimme」と出力するべきだと冗談めかして言った「Gimme gimme gimme a man after midnight」と呼ばれるアバの歌のため:
まあ、彼は実際に put itin を行いました。何人かの人々はそれを発見するのを楽しんでいて、今日までほとんどそれを忘れていました。
Colについて話すことはできません 、明らかに、しかし、これが問題を引き起こすとは予想していませんでした。ページが指定されていないmanの出力を解析すると、どのようなテストが失敗するのでしょうか。結局姿を現したとしても驚かないはずですが、実際には6年かかりました。
( commit message は私をThomasと呼んでいます。これは私がオンラインであまり使用していませんが、私の正式な名です。)
この問題はコミットで修正されました 84bde8 :man -w
はこのイースターエッグをトリガーしなくなりました。
少し考えた後、私は このイースターエッグを削除した を作成しました。それは、来たるman-db 2.8.0でなくなるでしょう。
何人かの人々を笑顔にしてくれたのは嬉しいです。結局それがその目的でしたし、今日の私のTwitterの通知なども、ほとんどの人が迷惑というよりは面白いと思ったようです。それでも、一部の人々はそれを不快に感じました、そして、6年はそのようなことのためにかなり良い走りのように思えます。この質問によって、予想外の露出よりも大幅に露出されることはおそらくないでしょう。寝る時間です。