為什麼男人在 00:30 印出“gimme gimme gimme”?

為什麼男人在 00:30 印出“gimme gimme gimme”?

我們注意到,我們的一些自動測試在 00:30 運行時會失敗,但在當天的其餘時間運行良好。他們因消息而失敗

gimme gimme gimme

stderr,這是沒有預料到的。為什麼我們會得到這個輸出?

答案1

親愛的@colmmacuait,我認為如果你在 0001 點輸入“man”,它應該會列印“gimme gimme gimme”。#阿巴
@馬納內爾- 2011 年 11 月 3 日

呃,那是我的錯,我建議的。對不起。

幾乎整個故事都在提交中。 man 的維護者是我的一個好朋友,六年前的一天,我開玩笑地對他說,如果你在午夜之後調用 man,它應該打印“給我給我給我”,因為阿爸歌曲“午夜後給我給我一個男人」:

嗯,他確實做到了把它 。有些人發現它很有趣,直到今天我們基本上都忘記了它。

我不能代表上校發言顯然,但我沒想到這會導致任何問題:在解析沒有指定頁面的 man 輸出時,什麼樣的測試會中斷?我想我不應該對它最終出現感到驚訝,但它確實花了六年的時間。

(這提交訊息叫我托馬斯,這是我的合法名字,儘管我在網上很少使用它。

此問題已透過提交修復84bde8奔跑的男人man -w將不再觸發這個復活節彩蛋。

答案2

這是一個復活節彩蛋man。當您在man不指定頁面或 with 的情況下運行時-w,它會向 stderr 輸出“gimme gimme gimme”,但僅在 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 認為有足夠的樂趣並且故事不會被遺忘,並且完全移除了復活節彩蛋

謝謝科林!

答案3

經過一番反思後,我刪除了這個復活節彩蛋。它將在即將發布的 man-db 2.8.0 中消失。

我很高興它讓一些人微笑,畢竟這是它的全部目的,而我今天的 Twitter 通知等表明大多數人認為這更有趣而不是煩人。儘管如此,有些人確實覺得這很煩人,六年似乎對這類事情來說是個不錯的選擇;透過這個問題,它可能不會獲得比已經出乎意料的更好的曝光度。是時候把它放到床上了。

相關內容