Emacs 동료 여러분, 안녕하세요.
"Ubuntu 10.04.1 LTS"에서 GNU Emacs 23.1.1을 실행 중이고 표준 Linux 커널 소스 코드(바닐라)에서 내장 Mx rgrep을 사용하여 수행하는 모든 검색이 조기에 끝나며 emacs 에코에 다음 오류가 인쇄됩니다. 영역:
Grep exited abnormally with code 123
나는 Redhat 시스템과 다른 (대규모) 코드 기반에서도 한동안 그것을 보았습니다. 누구든지 보았거나 더 나은 치료를 받았습니까?
감사해요!
편집: 나 이외의 이유로 stackexchange에서는 아래 내 의견을 편집하는 것을 허용하지 않으므로 여기에서 업데이트하겠습니다.
아래 설명에 따라 rgrep이 emacs 쉘 버퍼에서 실행하는 것과 동일한 명령을 실행하려고 시도했습니다.
find . \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS -o -path \*/.svn -o -path \*/.git
-o -path \*/.hg -o -path \*/.bzr -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{arch\} \) -prune -o -type f \( -name \*.\[ch\] \) -p
rint0 | xargs -0 -e grep -i -nH -e v4l_compat_ioctl32
오류는 인쇄되지 않지만 종료 코드를 조사하면 동일한 123이 다시 표시됩니다.
/home/mcradle/linux> echo $?
123
내가 실행하려고 시도한 Gilles의 의견에 따라
/home/mcradle/linux> find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l_compat_ioctl32 '{}' \;
이는 find 및 xargs 조합과 기능적으로 동일하며 종료 코드 0으로 완료되었습니다.
/home/mcradle/linux> echo $?
0
그래서 xargs에 문제가 있는 것 같습니다.
답변1
xargs 종료 코드 문서를 보면 다음과 같습니다.
123 if any invocation of the command exited with status 1-125
그러나 grep 문서에 따르면 grep이 패턴과 일치하지 않는 경우 1은 종료 상태입니다.
EXIT STATUS
Normally, the exit status is 0 if selected lines are found and 1 otherwise.
그래서 내가 보기에 emacs가 'rgrep' 검색을 실행하는 데 사용하는 명령줄은 항상 123을 반환하며 이 오류는 억제되거나 다음과 같은 명령줄로 대체되어야 하는 것 같습니다.
find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l
답변2
버전 제어 시스템에서 사용하는 디렉토리를 무시하면서 여러 C .c 및 .h 파일을 통해 재귀 grep을 수행하려는 것 같습니다. 당신은 승인을 원합니다. 보다http://betterthangrep.com/
ack에서 현재 수행 중인 작업을 정확하게 수행하는 명령은 다음과 같습니다.
ack --cc -i v4l_compat_ioctl32
-r, -n 및 -H의 효과는 ack에서 가정됩니다. -i는 여전히 대소문자를 구분하지 않으며 --cc는 "*.c 및 *.h 파일만 검색"이라고 말합니다.
찾을 필요가 없습니다. xargs가 필요하지 않습니다. 외부 모듈 없이 Perl 버전과 단일 Perl 프로그램만 설치됩니다.