Чому людина друкує "gimme gimme gimme" о 00:30?


1625

Ми помітили, що деякі наші автоматичні тести виходять з ладу, коли вони працюють в 00:30, але решту дня працюють добре. Вони не виходять із повідомленням "gimme gimme gimme" у stderr, чого не очікували. Чому ми отримуємо цей вихід?



54
Я не розумію. Чому ваш тестовий скрипт називає людину там, де він повинен вийти з ладу?
Джошуа

19
@Joshua Тому що ми хотіли "manpath" - "man -w". Дивіться відповідь.
Ярослав Кучера

67
задля історії, навіщо вам робити «людину-ж» щохвилини? що ти насправді тестуєш?
Олів'є Дулак

22
@OlivierDulac Це спрацьовує лише один раз у тесті. Ми налаштували порядок тестів, і раптом ця помилка з’явилася, коли вона була спровокована о 00:30 ...
Ярослав Кучера

Відповіді:


2146

Шановний @colmmacuait , я думаю, що якщо ви введете "man" в 0001 годин, він повинен надрукувати "gimme gimme gimme". #abba @marnanel - 3 листопада 2011 року

Е, це була моя вина, я запропонував це. Вибачте.

Досить багато вся історія в комітеті. Людина, що підтримує людину, є моїм добрим другом, і одного дня шість років тому я жартома сказав йому, що якщо ви позовете людину після півночі, вона повинна надрукувати " gimme gimme gimme ", через пісню "Abba" під назвою " Gimme gimme gimme a man" після півночі ":

Ну, він на самому справі поклав його в . Кілька людей розважалися, щоб відкрити його, і ми здебільшого про нього забули до сьогодні.

Я не можу говорити за Кола , очевидно, але я не очікував, що це колись спричинить якісь проблеми: який тип тесту порушиться при аналізі результатів роботи людини без вказаної сторінки? Я думаю, я не повинен дивуватися, що зрештою з'явився, але це зайняло шість років.

(The повідомлення фіксації називає мене Томас, який є моїм законним першим ім'ям , хоча я не використовую його в Інтернеті багато.)

Цю проблему було вирішено з допомогою 84bde8 : Людина, що біжить man -w, більше не запустить це пасхальне яйце


361
На жаль! Це ніколи не мало на меті впливати на випадки без помилок. Я не врахував цього, коли впровадив git.savannah.gnu.org/cgit/man-db.git/commit/… . Виправлено в майстер: git.savannah.gnu.org/cgit/man-db.git/commit/…
Колін Уотсон

3
Коментарі не для розширеного обговорення; ця розмова перенесена в чат .
тердон

13
Зауваження стосуються запиту роз'яснень та / або обговорення технічних моментів відповіді. Якщо ви хочете обговорити достоїнства писанок, будь ласка, візьміть його до чату .
terdon

8
Mamma mia, тепер я справді знаю!
Енріко Марія Де Анджеліс

3
можливо, людині потрібен дуже серйозний параметр
Патрік Тейлор

423

Це писанка в man. Коли ви запускаєте, manне вказуючи сторінку або з -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

Код виходу завжди 0.

Правильний вихід завжди повинен бути:

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

Рядок "gimme gimme gimme" можна знайти в RHEL, OpenSUSE, Fedora, Debian і, мабуть, і більше, тому це не дуже специфічно для distro. Ви можете підтвердити 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");

Я зв’язався із службою підтримки RHEL щодо цього питання.

Рядок походить від добре відомої пісні ABBA Gimme! Дай! Дай! (Людина після півночі) .


Розробник man-db Колін Ватсон вирішив, що було достатньо веселощів, і історія не забудеться і повністю видалила писанку .

Дякую Колін!


147
На faketimeдоступних платформах ви можете спробувати це, навіть не змінюючи системний час: faketime '00:30:00' man(Debian 8).
roaima


38
Автор затягнув пасхальне яйце, аби він не працював man, але не man -w: git.savannah.nongnu.org/cgit/man-db.git/commit/src/… та коментар Коліна до зізнання Марнанела ^ Вансвер .
Martijn Pieters

21
Згадаймо, що початковий вчинок спрацьовував о 12:01. Повторний фільтр змінив його до 12:30 з повідомленням журналу "пів на дванадцяту", яке знову цитується з тієї ж пісні.
Егмонт

6
@ 0x90 man -wдрукує поточний шлях пошуку на сторінці вручну, який є предметом, який ви цілком розумно можете використовувати в якості будівельного блоку для чогось іншого, наприклад, якщо те, що ви автоматизували, включало встановлення або тестування сторінок вручну.
Колін Уотсон

364

Після деякого роздуму я зняв це писанку . Він не піде в майбутньому man-db 2.8.0.

Я радий, що це змусило деяких людей посміхнутися, що, зрештою, було цілі цієї мети, а мої повідомлення в Twitter і так далі сьогодні говорять про те, що більшість людей вважають це кумеднішим, ніж дратівливим. Тим не менш, деякі люди вважають це дратівливим, і шість років здається досить хорошим пробігом для такої речі; це, мабуть, не отримає значно кращого опромінення, ніж це вже несподівано викликає це питання. Час покласти його спати.


121
Мені дуже сумно, що ти вирішив це. ІМО занадто багато людей випускають це для писанок.
Сет

36
Я не виключаю в майбутньому додавати щось інше, хоча і з більшою обережністю! Хоча це стало трохи несвіжим, а гумор вимагає новизни.
Колін Уотсон

31
Я маю згоду з @Seth, сумно бачити щось, що змусило більшість із нас посміхнутися, нам потрібно більше того, що насправді на цьому світі.
Videonauth

189
Сподіваюся, це не порушує жодних робочих процесів xkcd.com/1172
Lakshay Garg

73
@ColinWatson Я думаю, що відключити це в потоці за замовчуванням - це гарна ідея, тому це не порушує робочий процес нікого. Але в той же час прикро, що такий шедевр довелося зняти. Ви можете додати спеціальний прапор на кшталт, man -abbaі коли його звільнять після півночі, він дасть писанку.
Bartlomiej Skwira
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.