2013-08-01 6 views
7

git gc을 모든 repos에서 실행하는 crontab에 @daily 작업이 있습니다. 작업에 대한 로그 파일을 설정하려고하지만 I/O 리다이렉션이 찾고있는 결과를 생성하지 않습니다. 나는 빈 파일을 얻는다.'git gc'출력을 리디렉션하려고합니다

모든 성공을 거두지 않고 모든 >, 2>&1 등을 수행했습니다.

누군가가 내게 말했듯이 git gc은 출력 결과를 콘솔에 직접 출력하므로 출력이 stdout/stderr을 우회하는 출력 절차에 ncurses를 사용합니다.

올바른 방향으로 나를 가리킬 수 있습니까?

답변

6

이 작업을 시도 할 수 있습니다 :

script -q -c 'git gc' > log

을 또는이 (더 읽기 출력) :

script -q -c 'git gc' | sed 's/\r.*//g' > log

12

그것은 ncurses를 (일반적으로 인수의 ncurses를 사용하는 프로그램을 사용하지 않습니다 전체 화면).

strace -p -o git-gc.strace git gc 

실행

진행 메시지를 표준 에러 (파일 기술자 2)에 기록되어 있음을 보여줍니다 -하지만 표준 오류가 청각 장애없는 경우 그들이 사용할 수있어. 당신이

git gc 2>some_file 

을 실행하면 git gc 전혀 진행 메시지를 생성하지 않기 때문에 그럼 some_file는 비어 있습니다. 표준 오류 인 경우에 quiet세가 내가 코드를 발견하지 않았습니다

git gc --quiet 

: 소스 코드 (builtin/gc.c)을 보면

--quiet 명령 줄 옵션으로 설정되어 quiet 옵션이있다 아닌 청각 장애,하지만 난 그와 같이, 자식 소스의 다른 유사한 코드를 참조하십시오

quiet = !isatty(2); 

을 설정 할 명령 줄 옵션이 없습니다옵션 해제.

즉, git gc의 진행률 출력을 캡처하려면 stderr을 tty로 지정하여 실행 중임을 확인해야합니다.

some guy's answer은이를 수행하는 한 가지 방법을 제공합니다.

그러나 코드가 터미널에 쓰는 경우에만 진행 메시지를 생성하기 때문에 코드를 캡처해야하는지 실제로 고려해야합니다. 그들은 구원 받기 위해 고안된 것이 아니며 유용하지 않을 수도 있습니다.당신이 자식 소스를 직접 검사 할 경우

은 (당신이 충분히 동기 부여가 있다면, 진행 메시지를 강제로 그들을 해킹 및 기록 될) :

git clone git://git.kernel.org/pub/scm/git/git.git