Date

為什麼男人在 00:30 列印“給我給我給我”?

  • January 8, 2022

我們注意到,我們的一些自動測試在 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 withman -w將不再觸發此復活節彩蛋。

引用自:https://unix.stackexchange.com/questions/405783