Risposte:
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
La parte complicata è che xargs esegue una chiamata implicita alla subshell. Qui viene invocato esplicitamente e pipe non diventa la parte del trasportatore padre
cat foo.bar | wc -lecat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-Iinvece di -J; non c'è alcuna -Jopzione per xargs
xargsha -Jun'opzione equivalente a quella -idi Linuxxargs
-Jnon è definito in POSIX ma lo -Iè e ha un uso diverso da quello di GNU.)
Se vuoi elaborare tutte le righe di foo.txt dovrai usare un loop. Utilizzare &per mettere il processo in background
while read line; do
echo $line | bar.sh &
done < foo.txt
Se l'input contiene spazi, imposta temporaneamente il separatore di campo interno sulla nuova riga
# 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
xargsdell'OP utilizzato.