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 -l
undcat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-I
statt -J
; Es gibt keine -J
Option zu
xargs
have -J
Option, die -i
der 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
xargs
OP nachgeschlagen .