為什麼男人在 00:30 列印“給我給我給我”?
我們注意到,我們的一些自動測試在 00:30 執行時會失敗,但在一天的剩餘時間裡執行良好。他們因消息而失敗
gimme gimme gimme
in
stderr
,這是意料之中的。為什麼我們會得到這個輸出?
這是一個複活節彩蛋
man
。當您在man
未指定頁面或 with 的情況下執行時-w
,它會將“gimme gimme gimme”輸出到 stderr,但僅在 00:30:# 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 歌曲給我!給我!給我!(午夜過後的男人)。
man-db 的開發者 Colin Watson 認為有足夠的樂趣並且故事不會被遺忘,因此完全刪除了復活節彩蛋。
謝謝科林!
親愛的@colmmacuait,我認為如果您在 0001 小時輸入“man”,它應該列印“gimme gimme gimme”。#abba @marnanel - 2011 年 11 月 3 日
呃,那是我的錯,我建議的。對不起。
幾乎整個故事都在送出中。man 的維護者是我的一個好朋友,六年前的一天,我開玩笑地對他說,如果你在午夜之後呼叫 man,它應該列印“ gimme gimme gimme ”,因為阿爸的歌叫“ Gimme gimme gimme a man ”午夜之後“:
嗯,他確實把它放進去 了。一些人發現它很有趣,直到今天我們幾乎都忘記了它。
顯然,我不能代表 Col 說話,但我沒想到這會導致任何問題:在解析 man 的輸出時會中斷什麼樣的測試而沒有指定頁面?我想我不應該對最終出現一個感到驚訝,但它確實花了六年時間。
(送出消息稱我為 Thomas,這是我的合法名字,儘管我在網上很少使用它。)
送出84bde8已修復此問題: Running man with
man -w
將不再觸發此復活節彩蛋。