![为什么男人在 00:30 打印“gimme gimme gimme”?](https://linux22.com/image/122141/%E4%B8%BA%E4%BB%80%E4%B9%88%E7%94%B7%E4%BA%BA%E5%9C%A8%2000%3A30%20%E6%89%93%E5%8D%B0%E2%80%9Cgimme%20gimme%20gimme%E2%80%9D%EF%BC%9F.png)
我们注意到,我们的一些自动测试在 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 通知等表明大多数人认为这更有趣而不是烦人。尽管如此,有些人确实觉得这很烦人,六年似乎对这类事情来说是一个不错的选择;通过这个问题,它可能不会获得比已经出乎意料的更好的曝光度。是时候把它放到床上了。