@ 2021.09.07 , 12:10

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");

commit


支付宝打赏 [x]
您的大名: 打赏金额:

赞一个 (12)