![명령줄 길이가 "-s" 제한을 초과하지 않는 경우 "xargs -x"는 올바른 인수 하위 집합을 실행하지 않습니까?](https://linux55.com/image/142481/%EB%AA%85%EB%A0%B9%EC%A4%84%20%EA%B8%B8%EC%9D%B4%EA%B0%80%20%22-s%22%20%EC%A0%9C%ED%95%9C%EC%9D%84%20%EC%B4%88%EA%B3%BC%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EA%B2%BD%EC%9A%B0%20%22xargs%20-x%22%EB%8A%94%20%EC%98%AC%EB%B0%94%EB%A5%B8%20%EC%9D%B8%EC%88%98%20%ED%95%98%EC%9C%84%20%EC%A7%91%ED%95%A9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
xargs
크기가 초과 -x
되면 종료를 지정하는 옵션이 있습니다 (해당 옵션 참조).xargs
-s
xargs
이는 모든 인수가 즉시 실행되거나(명령줄의 문자 수가 지정된 숫자를 초과하지 않는 경우 -s
), 아니면 전혀 실행되지 않음 을 의미합니까 (그렇지 않은 경우)?
-x
xargs
지정된 인수 수를 초과하지 않는 명령줄 길이의 올바른 하위 집합(즉, 전부는 아님)을 사용하거나 실행하지 않는 것이 올바른가요 -s
?
답변1
-x
xargs
현재 빌드 중인 줄의 인수를 사용하지 않고 부적합한 인수가 처리되는 즉시 종료 됩니다 .
다음을 사용하여 차이점을 확인할 수 있습니다.
(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048
여기서는 xargs
1에서 2048 사이의 정수가 수신되고, 각 정수 뒤에 공백이 오고, 구분 기호 없이 1에서 1024 사이의 모든 정수가 수신됩니다. 출력 매개변수로 실행되며 echo
2048자 제한을 준수합니다. 한 줄에 맞지 않는 마지막 인수를 읽으면 xargs
"인수 줄이 너무 깁니다" 오류가 인쇄되지만 여전히 echo
마지막 인수가 발견되기 전에 누적된 인수로 호출하므로 여전히 변경 사항을 볼 수 있습니다. 1 2048까지의 모든 정수.
그리고 -x
:
(printf '%s ' {1..2048}; printf %s {1..1024}) | xargs -s 2048 -x
긴 인수가 발생했기 때문에 1854에서 중지하고 xargs
1855에서 시작하는 인수 라인을 구축하고 있으며 이 -x
옵션으로 인해 현재 구축 중인 인수 라인에 대해서는 아무 작업도 시도하지 않습니다.
가 있든 없든 명령을 성공적으로 실행하는 것이 불가능하다고 생각합니다 xargs
. 이 매개변수는 매개변수 줄이 너무 길어질 경우 해당 줄의 어떤 부분도 전혀 처리되지 않도록 보장합니다.-x
-x
-x
존재 여부에 관계없이 오버플로 매개변수 뒤의 매개변수는 처리되지 않습니다 -x
.xargs
(감사해요이르카초내 이전 버전의 답변이 잘못되었음을 지적하십시오. )