예를 들어, 다음 명령을 사용하여
cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"
foo.txt
두 줄 이 포함되어 있습니다
foo
bar
위 명령은 아무것도 인쇄하지 않습니다.
답변1
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
까다로운 부분은 xargs가 암시적 서브쉘 호출을 수행한다는 것입니다. 여기서 sh는 명시적으로 호출되었으며 파이프는 상위 컨베이어의 일부가 되지 않습니다.
답변2
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