1824

We've noticed that some of our automatic tests fail when they run at 00:30 but work fine the rest of the day. They fail with the message

gimme gimme gimme

in stderr, which wasn't expected. Why are we getting this output?

AdminBee
  • 19,340
  • 16
  • 43
  • 67
Jaroslav Kucera
  • 9,007
  • 5
  • 13
  • 27
  • 5
    Linking in: [Where is the latest source code of man command for linux?](https://unix.stackexchange.com/questions/226716/where-is-the-latest-source-code-of-man-command-for-linux) – Jeff Schaller Nov 20 '17 at 14:29
  • 66
    I don't get it. Why does your test script call man where it should fail? – Joshua Nov 20 '17 at 16:20
  • 26
    @Joshua Because we wanted the "manpath" - 'man -w'. See the answer. – Jaroslav Kucera Nov 20 '17 at 17:48
  • 79
    for the sake of history, why do you need to do a 'man -w' every minutes? what are you really testing? – Olivier Dulac Nov 21 '17 at 10:12
  • 26
    @OlivierDulac It's being triggered just once in the test. We've rearanged the order of tests and suddenly this error apeared as it was triggered at 00:30... – Jaroslav Kucera Nov 21 '17 at 11:52
  • 4
    @Joshua The reason it fails might also be connected to the fact that it prints this to `stderr` therefore indicating an error. – Patryk Nov 22 '17 at 15:32
  • 1
    FTR, this thread is mentioned in [Long Live Software Easter Eggs (ACM, 2022)](https://queue.acm.org/detail.cfm?id=3534857) – Martin Monperrus May 20 '22 at 13:48

3 Answers3

2400

Dear @colmmacuait, I think that if you type "man" at 0001 hours it should print "gimme gimme gimme". #abba
@marnanel - 3 November 2011

er, that was my fault, I suggested it. Sorry.

Pretty much the whole story is in the commit. The maintainer of man is a good friend of mine, and one day six years ago I jokingly said to him that if you invoke man after midnight it should print "gimme gimme gimme", because of the Abba song called "Gimme gimme gimme a man after midnight":

Well, he did actually put it in. A few people were amused to discover it, and we mostly forgot about it until today.

I can't speak for Col, obviously, but I didn't expect this to ever cause any problems: what sort of test would break on parsing the output of man with no page specified? I suppose I shouldn't be surprised that one turned up eventually, but it did take six years.

(The commit message calls me Thomas, which is my legal first name though I don't use it online much.)

This issue has been fixed with commit 84bde8: Running man with man -w will no longer trigger this easter egg.

PF4Public
  • 135
  • 11
Marnanel Thurman
  • 7,099
  • 2
  • 8
  • 10
  • 422
    Oops! It was never meant to affect non-error cases. I didn't take account of this when I implemented https://git.savannah.gnu.org/cgit/man-db.git/commit/?id=e37bc92f352c97c61ef63de745e43574d27b1276. Fixed in master: https://git.savannah.gnu.org/cgit/man-db.git/commit/?id=84bde8d8a9a357bd372793d25746ac6b49480525 – Colin Watson Nov 21 '17 at 09:55
  • 3
    Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/69069/discussion-on-answer-by-marnanel-thurman-why-does-man-print-gimme-gimme-gimme). – terdon Nov 21 '17 at 17:45
  • 13
    The comments are for asking for clarification and/or discussing the *technical* points of an answer. If you want to discuss the merits of Easter eggs, please [take it to chat](http://chat.stackexchange.com/rooms/69069/discussion-on-answer-by-marnanel-thurman-why-does-man-print-gimme-gimme-gimme). – terdon Nov 21 '17 at 17:46
  • May as well update this to note that it's been removed now :\ – rogerdpack Nov 28 '17 at 16:30
  • @Ángel https://git.savannah.gnu.org/cgit/man-db.git/commit/?id=b225d9e76fbb0a6a4539c0992fba88c83f0bd37e but appears it's mentioned in the next answer so no worries anyway :) – rogerdpack Nov 28 '17 at 18:49
  • 32
    _Mamma mia, now I really know!_ – Enlico Jul 15 '18 at 13:25
  • 12
    perhaps man needs a --seriously parameter – Patrick Taylor Oct 03 '18 at 06:08
  • but its not null! – mikeserv Mar 09 '19 at 07:45
474

This is an easter egg in man. When you run man without specifying the page or with -w, it outputs "gimme gimme gimme" to stderr, but only at 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

The exit code is always 0.

The correct output should always be:

# man -w
/usr/local/share/man:/usr/share/man:/usr/man
# echo $?
0
# man
What manual page do you want?
# echo $?
1

The string "gimme gimme gimme" can be found in RHEL, OpenSUSE, Fedora, Debian and probably more, so it's not really distro specific. You can grep your man binary to verify.

This code is responsible for the output, added by this commit:

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

I have contacted RHEL support about this issue.

The string comes from well known ABBA song Gimme! Gimme! Gimme! (A Man After Midnight).


The developer of the man-db, Colin Watson, decided that there was enough fun and the story won't get forgotten and removed the easter egg completely.

Thank you Colin!

Jaroslav Kucera
  • 9,007
  • 5
  • 13
  • 27
  • 163
    On platforms with `faketime` available you can try this without even needing to change the system time: `faketime '00:30:00' man` (Debian 8). – roaima Nov 20 '17 at 15:05
  • 2
    Other such: https://unix.stackexchange.com/questions/767/ https://unix.stackexchange.com/questions/92185/ https://unix.stackexchange.com/questions/224481/ https://unix.stackexchange.com/questions/150121/ – JdeBP Nov 20 '17 at 16:30
  • 5
    @rrauenza There is the buzilla ticket: https://bugzilla.redhat.com/show_bug.cgi?id=1515352 – Jaroslav Kucera Nov 21 '17 at 07:41
  • 43
    The author has now tightened the easter egg to only run on `man`, not `man -w`: http://git.savannah.nongnu.org/cgit/man-db.git/commit/src/man.c?id=84bde8d8a9a357bd372793d25746ac6b49480525 and [Colin's comment on Marnanel's confessio^Wanswer](//unix.stackexchange.com/posts/comments/726280). – Martijn Pieters Nov 21 '17 at 10:09
  • 31
    Let's mention that the initial commit triggered at 12:01am. A followup commit changed that to 12:30am with the commit log message "half past twelve" which is again quoted from the same song. – egmont Nov 21 '17 at 21:00
  • 2
    I still don't get why would anyone call `man` within an automation test? – 0x90 Nov 25 '17 at 10:19
  • 6
    @0x90 `man -w` prints the current manual page search path, which is the sort of thing you might quite reasonably use as a building block for something else, for example if the thing you were automating involved installing or testing manual pages. – Colin Watson Nov 25 '17 at 20:06
  • 1
    @ColinWatson what's wrong with using which and checking for the return value. – 0x90 Nov 26 '17 at 00:30
  • 2
    @0x90 That solves a different problem. `which` does not tell you anything about the *manual page* search path, only about the *program execution* search path. – Colin Watson Nov 27 '17 at 01:54
  • @ColinWatson I see, so the automation test tried to see if manual pages are in place, wow. I thought it's man exist iff it has manual pages. `gimme gimme gimme` – 0x90 Nov 27 '17 at 02:03
  • 2
    @0x90 I don't know exactly what the test in question was doing, but it may not have been quite that simple. As a less trivial example, one thing you might want to do if you were building system images could be to test that all the manual pages contained in them were syntactically correct. – Colin Watson Nov 27 '17 at 02:14
434

After some reflection, I've removed this Easter egg. It'll be gone in the upcoming man-db 2.8.0.

I'm glad that it made some people smile, which after all was the whole purpose of it, and my Twitter notifications and so on today suggest that most people thought it was more amusing than annoying. Still, some people did find it annoying, and six years seems like a pretty good run for that sort of thing; it probably isn't going to get significantly better exposure than it already unexpectedly has by way of this question. Time to put it to bed.

Colin Watson
  • 3,520
  • 1
  • 8
  • 13
  • 149
    I'm really sad you decided that. IMO too many people have it out for easter eggs. – Seth Nov 22 '17 at 01:52
  • 42
    I won't rule out adding something different in the future, albeit with more care! It was getting a bit stale, though, and humour does require novelty. – Colin Watson Nov 22 '17 at 01:54
  • 35
    I have to agree with @Seth, it is sad to see something go which made most of us smile, we need more of that actually on this world. – Videonauth Nov 22 '17 at 03:00
  • 224
    I hope this does not break any workflows https://xkcd.com/1172/ – lakshayg Nov 22 '17 at 04:41
  • 8
    Any other eggs out there? Hopefully, yes. On the (almost the) same topic, a long time ago, I created an *xml* config for some app (corporate env), and one of the tags was *sizeMatters*. ~one year later they made me rename it :( – CristiFati Nov 22 '17 at 06:45
  • 8
    Thank you Colin, I consider it wise decision. You can still add it under some new parameter, something like 'aptitude moo' - unix.stackexchange.com/questions/92185/whats-the-story-behind-super-cow-powers – Jaroslav Kucera Nov 22 '17 at 07:45
  • 83
    @ColinWatson I think disabling this in a default flow is a good idea, so it doesn't break anyone's workflow. But at the same time, it's a shame such a masterpiece had to be removed. You could add a special flag like `man -abba` and when fired after midnight would give the easter egg. – Bartłomiej Skwira Nov 22 '17 at 11:07
  • Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/69495/discussion-on-answer-by-colin-watson-why-does-man-print-gimme-gimme-gimme-at-0). If you want to explain why you think this was great/awful or why it should/should not be removed, please go to the linked chatroom. Any further comments here will be deleted unless they're actually asking for clarification from the author. – terdon Nov 30 '17 at 11:10
  • 2
    @LakshayGarg I'm sure somewhere there must be a script that checks for 3am by invoking `man -w`... – Kuba hasn't forgotten Monica Dec 11 '18 at 16:24
  • 1
    If this behaviour remained as a parametter i'd definitly change it in my .bashrc. I had came accros this a couple of times while on a rush and didn't even thought about abba or looking for why it happened – 3nrique0 Feb 28 '19 at 13:27
  • 5
    Actually, the removal of it broke my workflow. – Pourko Nov 08 '20 at 19:54
  • Even if I'd already known about it, it would have made me smile to know it was there on my machine. :( – Wowfunhappy Jul 29 '21 at 17:51
  • When I saw this I had test with Ubuntu 16.04, and yes, it's there :-D – sudodus Jan 05 '22 at 18:33