xargs를 사용할 때 인수 대신 stdin으로 리디렉션

xargs를 사용할 때 인수 대신 stdin으로 리디렉션

예를 들어, 다음 명령을 사용하여

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     

관련 정보