beispielsweise mit dem Befehl
cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"
Das foo.txt
enthält zwei Zeilen
foo
bar
Der obige Befehl druckt nichts.
Antwort1
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
Der schwierige Teil ist, dass xargs implizite Subshell-Aufrufe durchführt. Hier wird sh explizit aufgerufen und pipe wird nicht Teil des übergeordneten Förderers
Antwort2
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 versetzen.
while read line; do
echo $line | bar.sh &
done < foo.txt
Wenn Ihre Eingabe Leerzeichen enthält, setzen Sie den internen Feldtrenner 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