Respuestas:
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
La parte difícil es que xargs realiza una invocación de subshell implícita. Aquí se invoca sh explícitamente y la tubería no se convierte en parte del transportador principal
cat foo.bar | wc -l
ycat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-I
lugar de -J
; no hay -J
opción para
xargs
tiene una -J
opción que es equivalente a la -i
del linuxxargs
-J
no está definido en POSIX pero -I
es y tiene un uso diferente al de GNU.)
Si desea procesar todas las líneas de foo.txt, deberá usar un bucle. Use &
para poner el proceso en segundo plano
while read line; do
echo $line | bar.sh &
done < foo.txt
Si su entrada contiene espacios, configure temporalmente el separador de campo interno en la nueva línea
# 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 utilizado.