Geek
Linux彩蛋:gimme gimme gimme
投稿:Uing
如果你使用 Linux 系统,在大多数的发行版上,在半夜十二点半,打开终端 (Terminal),输入man
, 你会看到奇怪的东西:
gimme gimme gimme
这是一个接近十年的彩蛋,也是四年前才被一个开发者发现。
那这个彩蛋是什么意思呢?又是谁这么无聊大半夜一直输入man
去能发现这个彩蛋呢?
一切都从 StackExchange 的一个问题说起。
捷克的开发者Jaroslav Kucera 发现一个奇怪的现象,他的一个集成测试总是在半夜十二点半失败。这个测试一直在运行,而且不依赖外部网路,但总是在 12:30am 这个时间失败。追根溯源后他发现,是因为用了一个命令man -w
去获取系统 man
文档的地址。man
是 POSIX 系统的文档帮助命令,是manual的缩写。(有些技术BBS论坛会看到RTFM这个缩写,表示 read the f**king manual,说明你的问题在文档清楚的写着,不要浪费大家的时间)
Jaroslav发现,在任何其他时间,man -w
都给给出文档的目录地址,但在12:30am就会出现这个奇怪的信息:
gimme gimme gimme
/usr/local/man:/usr/local/share/man:/usr/share/man
而Jaroslav 的测试脚本默认用第一行作为目录去解析,而ginme ginme ginme
显然不是目录,自然就失败了。
很自然地 Jaroslav在 StackExchange 问了这个问题。当然,有问题自然有答案(?),很快 Marnanel 就自首了:
`Dear @colmmacuait, I think that if you type "man" at 0001 hours it should print "gimme gimme gimme". #abba @marnanel - 3 November 2011`
呃,是我的错,我做出的建议。Sorry
基本上Commit的信息就是整个故事。man 的维护者是我的好基友,六年前的时候我开玩笑地建议他如果有人大半夜之后用了man的命令,应该打印出 "gimme gimme gimme" .....
没想到他真的干了,而只有少数人发现了这秘密,我们也快忘记这个事情了,直到今天。
那这个“gimme gimme gimme”到底什么意思呢? Marnanel 回答说因为 Abba 乐队著名的 《gimme gimme gimme! (a man after midnight)》(半夜后给我找一个男人)
Marnanel 也没有想到这会导致任何问题,因为这真的只能是一个彩蛋(不影响关键功能的额外功能),而不是一个bug。
当然,你永远不知道你的用户会怎么用你的产品,例如在另一个事件,Wikimedia发现从印度突然每天向某个图片发来9千万的下载需求,最后发现印度一个开发者在开发App过程中用了Wikimedia的图片链接,只是下载图片但不显示,而这个App 因为中国抖音在印度被封禁而作为替代品流行起来,最后导致Wikimedia遭受无妄之灾。
最后,对着问题的修复就是:man -w
不会触发这个彩蛋,其他情况才会。
如何触发这个彩蛋
# date +%T -s "00:30:00"
00:30:00
# man
gimme gimme gimme
What manual page do you want?
源代码
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 gimmen");