답변:
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
까다로운 부분은 xargs가 암시 적 서브 쉘 호출을 수행한다는 것입니다. 여기에서 명시 적으로 호출되었고 파이프는 상위 컨베이어의 일부가되지 않습니다.
cat foo.bar | wc -l
와cat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-I
대신 의미 를 생각 -J
; -J
xargs에 대한 옵션 이 없습니다
xargs
이 -J
에 해당 옵션을 -i
리눅스의xargs
-J
POSIX에는 정의되어 있지 않지만 -I
GNU와 다른 용도로 사용됩니다.)
foo.txt의 모든 줄을 처리하려면 루프를 사용해야합니다. 사용 &
배경에 프로세스를 넣어
while read line; do
echo $line | bar.sh &
done < foo.txt
입력에 공백이 있으면 내부 필드 구분 기호를 줄 바꿈으로 임시 설정하십시오.
# save the field separator
OLD_IFS=$IFS
# new field separator, the end of line
IFS=$'\n'
for line in $(cat foo.txt) ; do
echo $line | bar.sh &
done
# restore default field separator
IFS=$OLD_IFS
xargs
사용한 OP 옵션을 찾았습니다 .