Warum druckt man um 00:30 Uhr „gimme gimme gimme“?


1625

Wir haben festgestellt, dass einige unserer automatischen Tests fehlschlagen, wenn sie um 00:30 Uhr ausgeführt werden, aber den Rest des Tages problemlos funktionieren. Sie scheitern mit der Meldung "gimme gimme gimme" in stderr, was nicht zu erwarten war. Warum bekommen wir diese Ausgabe?



54
Ich verstehe es nicht. Warum ruft Ihr Testskript man an, wo es fehlschlagen sollte?
Joshua

19
@Joshua Weil wir den "manpath" - "man -w" wollten. Siehe die Antwort.
Jaroslav Kucera

67
Warum müssen Sie der Geschichte zuliebe alle Minuten ein 'Mann-w' machen? was testest du wirklich
Olivier Dulac

22
@OlivierDulac Wird nur einmal im Test ausgelöst. Wir haben die Reihenfolge der Tests geändert und plötzlich trat dieser Fehler auf, als er um 00:30 Uhr ausgelöst wurde ...
Jaroslav Kucera,

Antworten:


2146

Sehr geehrte @colmmacuait , ich denke, wenn Sie "man" um 0001 Stunden eingeben , sollte es " gimme gimme gimme " drucken. #abba @marnanel - 3. November 2011

äh, das war meine Schuld, ich schlug es vor. Es tut uns leid.

So ziemlich die ganze Geschichte ist im Festschreiben. Der Betreuer des Menschen ist ein guter Freund von mir, und vor einem Tag, vor sechs Jahren, sagte ich ihm scherzhaft, wenn man den Menschen nach Mitternacht anruft , sollte er " gimme gimme gimme " drucken , weil das Abba-Lied " gimme gimme gimme a man" heißt nach Mitternacht ":

Nun, er hat tatsächlich steckt es in . Einige Leute waren amüsiert, es zu entdecken, und wir haben es bis heute größtenteils vergessen.

Ich kann natürlich nicht für Col sprechen , aber ich hatte nicht erwartet, dass dies jemals zu Problemen führen würde: Welche Art von Test würde beim Parsen der Ausgabe von man ohne Angabe einer Seite abbrechen? Ich nehme an, ich sollte mich nicht wundern, dass irgendwann einer aufgetaucht ist, aber es hat sechs Jahre gedauert.

(Die Festschreibungsnachricht nennt mich Thomas, das ist mein gesetzlicher Vorname, obwohl ich ihn online nicht oft verwende.)

Dieses Problem wurde mit Commit 84bde8 behoben : Running Man with man -wlöst dieses Osterei nicht mehr aus.


361
Hoppla! Es sollte niemals fehlerfreie Fälle betreffen. Dies habe ich bei der Implementierung von git.savannah.gnu.org/cgit/man-db.git/commit/… nicht berücksichtigt . Behoben
Colin Watson

3
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
terdon

13
Die Kommentare dienen dazu, um Klarheit zu bitten und / oder die technischen Punkte einer Antwort zu diskutieren . Wenn Sie über die Vorzüge von Ostereiern sprechen möchten, nehmen Sie es bitte mit ins Gespräch .
terdon

8
Mama Mia, jetzt weiß ich es wirklich!
Enrico Maria De Angelis

3
Vielleicht braucht der Mensch einen ernsthaften Parameter
Patrick Taylor

423

Dies ist ein Osterei in man. Wenn Sie manohne Angabe der Seite oder mit ausführen -w, wird "gimme gimme gimme" an stderr ausgegeben, jedoch nur um 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

Der Exit-Code ist immer 0.

Die korrekte Ausgabe sollte immer sein:

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

Die Zeichenfolge "gimme gimme gimme" ist in RHEL, OpenSUSE, Fedora, Debian und wahrscheinlich in mehr zu finden, es ist also nicht wirklich distro-spezifisch. Sie können grepIhre manBinärdatei überprüfen.

Dieser Code ist für die Ausgabe verantwortlich , die durch dieses Commit hinzugefügt wird :

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

Ich habe den RHEL-Support wegen dieses Problems kontaktiert.

Die Saite stammt aus dem bekannten ABBA-Song Gimme! Gib mir! Gib mir! (Ein Mann nach Mitternacht) .


Der Entwickler der man-db, Colin Watson, entschied, dass es genug Spaß gab und die Geschichte nicht vergessen wird und entfernte das Osterei vollständig .

Vielen Dank, Colin!


147
Auf Plattformen mit faketimeVerfügbarkeit können Sie dies versuchen, ohne die Systemzeit ändern zu müssen: faketime '00:30:00' man(Debian 8).
Roaima

5
@rrauenza Es gibt das Ticket für Buzilla: bugzilla.redhat.com/show_bug.cgi?id=1515352
Jaroslav Kucera


21
Erwähnen wir, dass das erste Commit um 00:01 Uhr ausgelöst wurde. Ein Follow-up-Commit änderte sich zu 12:30 Uhr mit der Commit-Protokollnachricht "halb eins", die wiederum aus demselben Lied zitiert wird.
Montag,

6
@ 0x90 gibt man -wden aktuellen Suchpfad für Handbuchseiten aus. Diese Art von Pfad können Sie durchaus als Baustein für etwas anderes verwenden, zum Beispiel, wenn das, was Sie automatisiert haben, das Installieren oder Testen von Handbuchseiten umfasste.
Colin Watson

364

Nach einigem Nachdenken habe ich dieses Osterei entfernt . Es wird in der kommenden man-db 2.8.0 verschwunden sein.

Ich bin froh, dass es einige Leute zum Lächeln brachte, was schließlich das ganze Ziel war, und meine heutigen Twitter-Benachrichtigungen und so weiter lassen vermuten, dass die meisten Leute es eher amüsant als nervig fanden. Trotzdem fanden es einige Leute ärgerlich, und sechs Jahre scheinen für so etwas ein ziemlich guter Lauf zu sein. es wird wahrscheinlich nicht wesentlich besser belichtet, als es bei dieser Frage bereits unerwartet der Fall ist. Zeit, es ins Bett zu bringen.


121
Ich bin wirklich traurig, dass du das entschieden hast. IMO haben zu viele Leute Lust auf Ostereier.
Seth

36
Ich werde nicht ausschließen, in Zukunft etwas anderes hinzuzufügen, wenn auch mit größerer Sorgfalt! Es wurde allerdings ein bisschen langweilig, und Humor erfordert Neuheit.
Colin Watson

31
Ich muss @Seth zustimmen, es ist traurig, etwas zu sehen, das die meisten von uns zum Lächeln gebracht hat. Wir brauchen mehr davon auf dieser Welt.
Videonauth

189
Ich hoffe, dass dies keine Workflows unterbricht. Xkcd.com/1172
Lakshay Garg

73
@ColinWatson Ich halte es für eine gute Idee, dies in einem Standardablauf zu deaktivieren, damit der Arbeitsablauf von niemandem unterbrochen wird. Aber gleichzeitig ist es eine Schande, dass ein solches Meisterwerk entfernt werden musste. Sie könnten eine spezielle Flagge hinzufügen man -abbaund wenn nach Mitternacht abgefeuert würde das Osterei geben.
Bartlomiej Skwira
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.