为什么 man 在 00:30 打印“gimme gimme gimme”?

Jar*_*era 1774 man date

我们注意到,我们的一些自动测试在 00:30 运行时会失败,但在一天的其余时间运行良好。他们失败的消息

gimme gimme gimme
Run Code Online (Sandbox Code Playgroud)

in stderr,这是意料之中的。为什么我们得到这个输出?

小智 2338

亲爱的@colmmacuait,我认为如果你在 0001 小时输入“man”,它应该打印“gimme gimme gimme”。#abba @marnanel - 2011 年 11 月 3 日

呃,那是我的错,我建议的。对不起。

几乎整个故事都在提交中。man 的维护者是我的好朋友,六年前的一天,我开玩笑地对他说,如果你在午夜之后调用 man 应该打印“ gimme gimme gimme ”,因为阿爸的歌叫“ Gimme gimme gimme gimme a man”午夜后“:

嗯,他确实把它放进去 。一些人很高兴地发现它,直到今天我们大多忘记了它。

显然,我不能代表 Col 发言,但我没想到这会导致任何问题:在解析没有指定页面的 man 输出时,什么样的测试会中断?我想我不应该对最终出现一个人感到惊讶,但它确实花了六年时间。

提交消息称我为 Thomas,这是我的合法名字,虽然我不太在网上使用它。)

此问题已通过提交84bde8 修复 Running man withman -w将不再触发这个复活节彩蛋。

  • 哎呀!它从未打算影响非错误情况。我在实现 https://git.savannah.gnu.org/cgit/man-db.git/commit/?id=e37bc92f352c97c61ef63de745e43574d27b1276 时没有考虑到这一点。固定在主:https://git.savannah.gnu.org/cgit/man-db.git/commit/?id=84bde8d8a9a357bd372793d25746ac6b49480525 (405认同)
  • _妈妈咪呀,现在我真的知道了!_ (22认同)
  • 这些评论是为了要求澄清和/或讨论答案的*技术*要点。如果你想讨论复活节彩蛋的优点,请[拿去聊](http://chat.stackexchange.com/rooms/69069/discussion-on-answer-by-marnanel-thurman-why-does-man -print-gimme-gimme-gimme)。 (13认同)
  • 也许 man 需要一个 --seriously 参数 (7认同)
  • 评论不用于扩展讨论;此对话已[移至聊天](http://chat.stackexchange.com/rooms/69069/discussion-on-answer-by-marnanel-thurman-why-does-man-print-gimme-gimme-gimme) . (3认同)

Jar*_*era 460

这是一个复活节彩蛋man。当您在man不指定页面或 with 的情况下运行时-w,它会将“gimme gimme gimme”输出到 stderr,但仅在 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
Run Code Online (Sandbox Code Playgroud)

退出代码始终为 0。

正确的输出应该总是:

# man -w
/usr/local/share/man:/usr/share/man:/usr/man
# echo $?
0
# man
What manual page do you want?
# echo $?
1
Run Code Online (Sandbox Code Playgroud)

字符串“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");
Run Code Online (Sandbox Code Playgroud)

我已经就这个问题联系了 RHEL 支持。

琴弦来自著名的ABBA 歌曲 Gimme!给我!给我!(午夜过后的男人)


man-db 的开发者 Colin Watson 认为有足够的乐趣并且故事不会被遗忘并完全删除了复活节彩蛋

谢谢科林!

  • 在有 `faketime` 可用的平台上,你甚至可以在不需要更改系统时间的情况下尝试:`faketime '00:30:00' man` (Debian 8)。 (156认同)
  • 作者现在已经收紧了复活节彩蛋只在 `man` 上运行,而不是在 `man -w` 上运行:http://git.savannah.nongnu.org/cgit/man-db.git/commit/src/man.c ?id=84bde8d8a9a357bd372793d25746ac6b49480525 和 [科林对 Marnanel 的自白的评论^Wanswer](//unix.stackexchange.com/posts/comments/726280)。 (41认同)
  • 让我们提一下,最初的提交是在凌晨 12:01 触发的。后续提交将其更改为上午 12:30,提交日志消息“十二点半”再次引用了同一首歌。 (26认同)
  • @0x90 `man -w` 打印当前的手册页搜索路径,这是您可以相当合理地用作其他内容的构建块的类型,例如,如果您正在自动化的内容涉及安装或测试手册页。 (6认同)
  • @rrauenza 有 buzilla 票:https://bugzilla.redhat.com/show_bug.cgi?id=1515352 (5认同)
  • 其他如:https://unix.stackexchange.com/questions/767/ https://unix.stackexchange.com/questions/92185/ https://unix.stackexchange.com/questions/224481/ https://unix .stackexchange.com/questions/150121/ (2认同)
  • 我仍然不明白为什么有人会在自动化测试中调用 `man`? (2认同)
  • @0x90 这解决了一个不同的问题。`which` 不会告诉您有关 *手册页* 搜索路径的任何信息,只告诉您有关 *程序执行* 搜索路径的任何信息。 (2认同)
  • @0x90 我不知道所讨论的测试到底在做什么,但它可能没有那么简单。作为一个不太简单的例子,如果您正在构建系统映像,您可能想要做的一件事可能是测试其中包含的所有手册页在语法上是否正确。 (2认同)

Col*_*son 416

经过一番思考,我已经删除了这个复活节彩蛋。它会在即将到来的 man-db 2.8.0 中消失。

我很高兴它让一些人微笑,毕竟这就是它的全部目的,我今天的 Twitter 通知等等表明,大多数人认为这更有趣而不是烦人。尽管如此,有些人确实觉得这很烦人,六年似乎对这种事情来说是一个不错的选择。通过这个问题,它可能不会获得比它已经出乎意料地更好的曝光率。是时候把它放在床上了。

  • 我希望这不会破坏任何工作流程 https://xkcd.com/1172/ (215认同)
  • 我真的很难过你决定了。IMO 有太多人想要复活节彩蛋了。 (142认同)
  • @ColinWatson 我认为在默认流程中禁用它是一个好主意,因此它不会破坏任何人的工作流程。但与此同时,这样的杰作不得不被移除,真是太可惜了。你可以添加一个像`man -abba`这样的特殊标志,当午夜过后发射时会得到复活节彩蛋。 (82认同)
  • 我不排除将来添加不同的东西,尽管要更加小心!然而,它变得有点陈旧,幽默确实需要新奇。 (40认同)
  • 我不得不同意@Seth,看到让我们大多数人微笑的事情令人难过,我们实际上在这个世界上需要更多这样的东西。 (34认同)
  • 谢谢科林,我认为这是明智的决定。您仍然可以在一些新参数下添加它,例如“aptitude moo” - unix.stackexchange.com/questions/92185/whats-the-story-behind-super-cow-powers (8认同)
  • 还有别的鸡蛋吗?希望是的。在(几乎)相同的主题上,很久以前,我为某个应用程序(企业环境)创建了一个 *xml* 配置,其中一个标签是 *sizeMatters*。~一年后他们让我重命名它:( (7认同)
  • @LakshayGarg 我确信某个地方一定有一个脚本通过调用“man -w”来检查凌晨 3 点... (3认同)
  • 实际上,删除它破坏了我的工作流程。 (3认同)