我们注意到,某些自动测试在00:30运行时会失败,但在一天的其余时间中仍然可以正常工作。他们失败,并在stderr中显示消息“ gimme gimme gimme”,这是意料之外的。为什么我们得到这个输出?
我们注意到,某些自动测试在00:30运行时会失败,但在一天的其余时间中仍然可以正常工作。他们失败,并在stderr中显示消息“ gimme gimme gimme”,这是意料之外的。为什么我们得到这个输出?
Answers:
亲爱的@colmmacuait,我认为,如果您在0001小时键入“ man”,则应打印“ gimme gimme gimme”。#abba @marnanel- 2011年11月3日
嗯,那是我的错,我建议了。抱歉。
整个故事几乎都在提交中。人的维护者是我的好朋友,六年前的一天,我开玩笑地对他说,如果您在午夜之后调用人,则应打印“ gimme gimme gimme ”,因为阿爸的一首歌叫“ Gimme gimme gimme a man”。午夜之后:
好吧,他确实把它放进去 了。一些人发现它很有趣,而直到今天我们大多数都忘记了它。
我显然不能代表Col,但是我没想到这会引起任何问题:在不指定页面的情况下解析man的输出会中断哪种测试?我想我不应该惊讶一个人最终出现了,但是确实花了六年时间。
(提交消息称我为Thomas,虽然我不太在线使用它,但这是我的法定名字。)
提交84bde8已解决此问题:正在运行的人man -w
将不再触发此复活节彩蛋。
这是一个复活节彩蛋man
。当您运行时man
未指定页面或使用时-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歌曲Gimme!给我 给我 (午夜后的男人)。
人事数据库的开发人员,科林·沃森(Colin Watson)认为,玩得很开心,而且这个故事不会被遗忘,并完全删除了复活节彩蛋。
谢谢科林!
faketime
可用的平台上,您可以尝试此操作,甚至无需更改系统时间:faketime '00:30:00' man
(Debian 8)。
man
,而不是man -w
:git.savannah.nongnu.org/cgit/man-db.git/commit/src/…以及Colin对Marnanel的confessio ^ Wanswer的评论。
man -w
打印当前的手册页搜索路径,您可以合理地将其用作其他内容的构建块,例如,如果要自动化的事物涉及安装或测试手册页。
经过一番思考,我把这个复活节彩蛋移除了。在即将发布的man-db 2.8.0中将消失。
我很高兴它使某些人微笑,这毕竟是它的全部目的,而今天我的Twitter通知等表明,大多数人认为它比有趣更有趣。不过,有些人还是觉得这很烦人,而六年似乎是个不错的成绩。它可能不会比通过这个问题已经意外地获得更好的曝光率。是时候睡觉了。
man -abba
,午夜后解雇时会送出复活节彩蛋。