우리는 자동 테스트 중 일부가 00:30에 실행될 때 실패하지만 하루 종일 제대로 작동한다는 것을 알았습니다. stderr에서 "gimme gimme gimme"메시지와 함께 실패하지만 예상하지 못했습니다. 이 결과를 얻는 이유는 무엇입니까?
우리는 자동 테스트 중 일부가 00:30에 실행될 때 실패하지만 하루 종일 제대로 작동한다는 것을 알았습니다. stderr에서 "gimme gimme gimme"메시지와 함께 실패하지만 예상하지 못했습니다. 이 결과를 얻는 이유는 무엇입니까?
답변:
친애하는 @colmmacuait , 0001 시간에 "man"을 입력하면 " gimme gimme gimme "가 인쇄되어야한다고 생각합니다. #abba @ marnanel -2011 년 11 월 3 일
그게 내 잘못이야 내가 제안 했어 죄송합니다.
거의 모든 이야기가 커밋됩니다. 사람의 관리자는 나의 좋은 친구입니다. 그리고 6 년 전 어느 날 자정 이후에 사람을 불러 오면 " gimme gimme gimme "라는 Abba 노래 때문에 " gimme gimme gimme a man "이라고 인쇄했습니다. 자정 이후 ":
음, 그는 실제로 않았다 넣어 에서 . 몇몇 사람들은 그것을 발견하기 위해 즐겁게 지 냈으며, 우리는 오늘날까지 대부분 잊어 버렸습니다.
분명히 Col을 말할 수 는 없지만 이것이 아무런 문제를 일으키지 않을 것이라고는 생각하지 않았습니다. 나는 결국 하나가 나타났다는 것에 놀라지 말아야한다고 생각하지만 6 년이 걸렸다.
( 커밋 메시지 는 Thomas라고 부릅니다. 토마스는 온라인에서 많이 사용하지 않지만 법적 이름입니다.)
이 문제는 commit 84bde8 로 해결되었습니다 : Man with Running man -w
은 더 이상이 부활절 달걀을 유발하지 않습니다.
에 부활절 달걀입니다 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 등에서 찾을 수 있으므로 실제로는 배포판에 따라 다릅니다. 당신은 할 수 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 개발자 인 콜린 왓슨 (Colin Watson)은 재미가 충분하다고 결정했으며 이야기는 잊혀지지 않고 부활절 달걀을 완전히 제거했습니다 .
콜린 감사합니다!
faketime
가능한 플랫폼 에서는 시스템 시간을 변경하지 않고도이 작업을 시도 할 수 있습니다 : faketime '00:30:00' man
(Debian 8).
man
,하지 man -w
: git.savannah.nongnu.org/cgit/man-db.git/commit/src/... 및 Marnanel의 confessio ^ Wanswer 콜린의 코멘트 .
man -w
은 현재 매뉴얼 페이지 검색 경로를 인쇄합니다. 예를 들어 자동화하려는 것이 매뉴얼 페이지의 설치 또는 테스트와 같은 경우 다른 것의 빌딩 블록으로 상당히 합리적으로 사용할 수있는 것입니다.
약간의 반영 후, 나는 이 이스터 에그를 제거했습니다 . 다가오는 man-db 2.8.0에 나옵니다.
나는 그것이 일부 사람들을 미소 짓게해서 기쁘다. 결국 그 목적이 전부 였고, 트위터 알림은 오늘날 대부분의 사람들이 성가신 것보다 더 재미 있다고 생각한다고 제안한다. 그럼에도 불구하고 어떤 사람들은 성가신 것을 알게되었고 6 년은 그런 종류의 일에는 꽤 좋은 달리기 인 것 같습니다. 아마도이 질문에 의해 이미 예상치 못한 노출보다 훨씬 더 나은 노출을 얻지 못할 것입니다. 잠자리에들 시간입니다.
man -abba
자정 이후에 발사했을 때 와 같은 특별한 깃발을 추가 하면 부활절 달걀을 줄 수 있습니다.