Antworten:
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
Der schwierige Teil ist, dass xargs implizite Subshell-Aufrufe ausführt. Hier wird sie explizit aufgerufen und das Rohr wird nicht Teil des übergeordneten Förderers
cat foo.bar | wc -lundcat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-Istatt -J; Es gibt keine -JOption zu
xargshave -JOption, die -ider Linux -Version entsprichtxargs
-J-I
Wenn Sie alle Zeilen von foo.txt verarbeiten möchten, müssen Sie eine Schleife verwenden. Verwenden Sie &diese Option , um den Prozess in den Hintergrund zu stellen
while read line; do
echo $line | bar.sh &
done < foo.txt
Wenn Ihre Eingabe Leerzeichen enthält, setzen Sie das interne Feldtrennzeichen vorübergehend auf die neue Zeile
# 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
xargsOP nachgeschlagen .