명령줄 길이가 "-s" 제한을 초과하지 않는 경우 "xargs -x"는 올바른 인수 하위 집합을 실행하지 않습니까?

명령줄 길이가 "-s" 제한을 초과하지 않는 경우 "xargs -x"는 올바른 인수 하위 집합을 실행하지 않습니까?

xargs크기가 초과 -x되면 종료를 지정하는 옵션이 있습니다 (해당 옵션 참조).xargs-s

xargs이는 모든 인수가 즉시 실행되거나(명령줄의 문자 수가 지정된 숫자를 초과하지 않는 경우 -s), 아니면 전혀 실행되지 않음 을 의미합니까 (그렇지 않은 경우)?

-xxargs지정된 인수 수를 초과하지 않는 명령줄 길이의 올바른 하위 집합(즉, 전부는 아님)을 사용하거나 실행하지 않는 것이 올바른가요 -s?

답변1

-xxargs현재 빌드 중인 줄의 인수를 사용하지 않고 부적합한 인수가 처리되는 즉시 종료 됩니다 .

다음을 사용하여 차이점을 확인할 수 있습니다.

(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048

여기서는 xargs1에서 2048 사이의 정수가 수신되고, 각 정수 뒤에 공백이 오고, 구분 기호 없이 1에서 1024 사이의 모든 정수가 수신됩니다. 출력 매개변수로 실행되며 echo2048자 제한을 준수합니다. 한 줄에 맞지 않는 마지막 인수를 읽으면 xargs"인수 줄이 너무 깁니다" 오류가 인쇄되지만 여전히 echo마지막 인수가 발견되기 전에 누적된 인수로 호출하므로 여전히 변경 사항을 볼 수 있습니다. 1 2048까지의 모든 정수.

그리고 -x:

(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048 -x

긴 인수가 발생했기 때문에 1854에서 중지하고 xargs1855에서 시작하는 인수 라인을 구축하고 있으며 이 -x옵션으로 인해 현재 구축 중인 인수 라인에 대해서는 아무 작업도 시도하지 않습니다.

가 있든 없든 명령을 성공적으로 실행하는 것이 불가능하다고 생각합니다 xargs. 이 매개변수는 매개변수 줄이 너무 길어질 경우 해당 줄의 어떤 부분도 전혀 처리되지 않도록 보장합니다.-x-x-x

존재 여부에 관계없이 오버플로 매개변수 뒤의 매개변수는 처리되지 않습니다 -x.xargs

(감사해요이르카초내 이전 버전의 답변이 잘못되었음을 지적하십시오. )

관련 정보