为什么男人在 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 通知等表明大多数人认为这更有趣而不是烦人。尽管如此,有些人确实觉得这很烦人,六年似乎对这类事情来说是一个不错的选择;通过这个问题,它可能不会获得比已经出乎意料的更好的曝光度。是时候把它放到床上了。

相关内容