por ejemplo, usando el comando
cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"
El foo.txt
contiene dos líneas.
foo
bar
El comando anterior no imprime nada.
Respuesta1
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
La parte complicada es que xargs realiza una invocación de subcapa implícita. Aquí sh se invoca explícitamente y la tubería no se convierte en parte del transportador principal
Respuesta2
Si desea procesar todas las líneas de foo.txt, deberá utilizar un bucle. Úselo &
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