Redirecionar para stdin em vez de argumento ao usar xargs [closed]

9

por exemplo, usando o comando

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

O foo.txt contém duas linhas

foo
bar

O comando acima não imprime nada.

    
por Ryan 24.12.2013 / 08:04

2 respostas

4

cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh" 

Parte complicada é que xargs executa invocação de subshell implícita. Aqui sh invocado explicitamente e pipe não se torna a parte do transportador pai

    
por 24.12.2013 / 08:17
1

Se você quiser processar todas as linhas de foo.txt, você terá que usar um loop. Use & para colocar o processo em segundo plano

while read line; do
   echo $line | bar.sh &
done < foo.txt

Se a sua entrada contiver espaços, defina temporariamente o separador de campo interno para a nova linha

# 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     
    
por 24.12.2013 / 08:15