Redirigir a stdin en lugar de argumento cuando se usa xargs

Redirigir a stdin en lugar de argumento cuando se usa xargs

por ejemplo, usando el comando

cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"

El foo.txtcontiene 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     

información relacionada