Cygwin "찾기"는 아무것도 반환하지 않습니다.

Cygwin "찾기"는 아무것도 반환하지 않습니다.

이 명령은 Windows Server 2008 r2에서 실행되는 Cygwin에서 아무것도 반환하지 않습니다.

/usr/bin/찾기 /

약간의 일시 중지가 발생하지만 텍스트가 반환되지 않습니다. 오류 없음, 결과 없음 등. 인수(예: -type f)를 사용하여 다른 검색 경로로 시도했으며 cygwin 경로를 /usr/local/bin:/usr/bin으로 설정했습니다. 아무것도 작동하지 않습니다.

아이디어?

감사해요

답변1

그것은 매우 이상한 행동이며 Cygwin을 사용하는 동안 그런 것을 본 적이 없습니다. 댓글로 정보를 물어볼 만큼 평판 포인트가 부족해서 제가 사용할 디버깅 기술만 포스팅하겠습니다. 비슷한 문제를 겪고 있는 다른 누구에게나 도움이 되기를 바랍니다.

먼저, 올바른 실행 파일을 실행하고 있는지 확인하려고 합니다. 실행하면 find --version다음과 같은 결과가 반환됩니다.

찾기(GNU findutils) 4.5.11

Cygwin(4.5.11-1)으로 패키지됨

여전히 출력이 나오지 않으면 Cygwin의 strace 명령을 설치하고 사용합니다.

mkdir testdir
strace -o find.out find testdir
rmdir testdir

straceCygwin 실행 파일이 Cygwin DLL에 대해 수행하는 호출을 확인할 수 있습니다. 위 명령을 사용하면 find 명령의 출력이 find.out.

Windows 시스템 프로그래밍에 익숙하지 않으면 대부분의 내용이 이해되지 않습니다. 그러나 출력을 살펴보면 여전히 명령이 수행하는 작업에 대한 아이디어를 얻을 수 있습니다. 예를 들어 명령에 전달되는 Cygwin PATH 및 기타 환경 변수가 캡처됩니다. 나는 일반적으로 open( 명령(찾기)이 어떤 파일을 사용하려고 하는지 확인하기 위해 검색합니다. open 함수에 대한 성공적인 호출은 다음과 같이 표시됩니다.

open: open(/home/anthony/t, 0x30C000)
open: open(., 0x400000)

열기에 대한 실패한 호출은 -1 값을 반환합니다. 열려고 시도하는 모든 파일이 실제로 명령이 올바르게 작동하는 데 필요한 것은 아닙니다. 다음은 실패한 시도 중 하나의 예입니다(정보가 locale.alias 존재하는 경우 읽을 수 있지만 find 작업을 수행하는 데 반드시 필요한 것은 아닙니다).

open: -1 = open(/usr/local/share/locale/locale.alias, 0x8000), errno 2

testdir참고: strace 출력 파일에 너무 많은 양의 정보가 캡처되지 않도록 빈 디렉터리를 생성한 다음 제거합니다 .

관련 정보