EOF에 도달한 후 xargs가 끝나지 않습니다

EOF에 도달한 후 xargs가 끝나지 않습니다

나는 이 bash 명령을 사용합니다:

cat urls.txt | xargs -d $"\n" -n 1 -P 250 php script.php $1

파일 끝에 도달하면 urls.txt아무 작업도 수행되지 않습니다. 내 스크립트(문제가 있는 경우)는 웹 사이트에 연결하여 찾고 있지만 <a href>스크립트를 수동으로 실행하면 php script.php http://urlxargs 명령을 실행할 때 수백 개의 웹 사이트가 있더라도 제대로 작동 urls.txt하지만 파일이 충분히 큰 경우( 몇 MB) 도달하면 아무 작업도 수행하지 않습니다.EOF.

내 생각에는 스크립트에 아무런 문제가 없는 것 같습니다. 어떻게 든 xargs가 파일 끝을 감지할 수 없고 입력을 계속 기다리고 있습니다. 해결책이 있나요?

편집하다:tail -n1 urls.txt또한 null 데이터가 있는지 EOF를 확인해 보았는데 모든 것이 잘 작동했습니다.

답변1

-script가 작동하지 않는 이유를 모르겠습니다 xargs. 끝에 개행 문자가 없거나 다른 -d옵션 문제가 있을 수 있습니다. 더 작은 목록이 실행되므로 일부 줄에 문제가 있는 문자가 있을 수 있습니다.

그래서 -d $'\n'나는 -I{}. 명령을 사용하면 {}모든 줄에서 대체됩니다.

또한, 당신은우루무치대학교, xargs제안 -a또는 --arg-file옵션:

-a 파일, --arg-file=파일표준 입력 대신 파일에서 항목을 읽습니다. 이 옵션을 사용하면 명령을 실행할 때 stdin이 변경되지 않은 상태로 유지됩니다. 그렇지 않으면 stdin이 /dev/null에서 리디렉션됩니다.

노력하다:

xargs -a urls.txt -I{} -P 250 php script.php {}

관련 정보