質問: なぜ男は00:30に「gimme gimme gimme」を印刷するのですか? 自動テストの一部が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は、十分な楽しみがあり、物語は忘れられないだろうと決定し、 イースターエッグを完全に削除 しました。コリンありがとう!