xargs를 사용하여 제공된 각 인수에 대한 명령을 실행하려고하지만 불행히도 --replace / -I 플래그가 -n과 결합되면 제대로 작동하지 않는 것 같습니다. {}은 -n 옵션에 관계없이 stdin에서 읽은 전체 인수 목록으로 확장되는 것으로 보입니다.
불행히도 웹의 모든 예제는 {}이 확장되는 여러 인수를 취하는 명령 (mv, cp, rm)에 대한 것 같습니다.
예를 들어, 다음을 실행할 때 :
echo a b c d | xargs -n 1 -I {} echo derp {}
출력은 다음과 같습니다.
derp a b c d
그러나 나는 기대했다.
derp a
derp b
derp c
derp d
그러나 -I {}없이 실행하면 예상 결과가 나타납니다.
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
xargs로 이것을 달성 할 수있는 방법이 있습니까? 나의 궁극적 인 의도는 그것을 사용하여 여러 (병렬) ssh 세션을 실행하는 것입니다.
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
xargs (GNU findutils) 4.4.2
RHEL 6.3에서 실행 중 입니다.
man xargs
on -I
: Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.
따라서 설계된대로 동작합니다.
@ André는 tak을 병렬로 실행하려는 것이기 때문에 GNU 병렬을 살펴 보셨습니까? 작업을 훌륭하게 수행합니다. 면책 조항 : 데비안 용으로 패키지했습니다.
—
rbrito
GNU 병렬은 좋은 대안으로 보였지만 불행히도이 특정 호스트에는 설치할 수 없습니다.
—
André Fernandes
@ AndréFernandes oletange.blogspot.dk/2013/04/why-not-install-gnu-parallel.html
—
Ole Tange
xargs
에서는 의도 한대로 작동 하지만 GNU에서는 그렇지 않습니다xargs
.