Das Exportieren der Funktion sollte dies tun (ungetestet):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Sie können das eingebaute printfanstelle des externen verwenden seq:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Durch die Verwendung von return 0und auf exit 0diese Weise wird auch jeder Fehlerwert maskiert, der möglicherweise durch den vorhergehenden Befehl erzeugt wird. Wenn es keinen Fehler gibt, ist dies die Standardeinstellung und daher etwas redundant.
@phobic erwähnt, dass der Bash-Befehl vereinfacht werden könnte
bash -c 'echo_var "{}"'
Bewegen Sie das {}direkt hinein. Es ist jedoch anfällig für Befehlsinjektionen, wie von @Sasha hervorgehoben.
Hier ist ein Beispiel, warum Sie das eingebettete Format nicht verwenden sollten :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
Ein weiteres Beispiel dafür, warum nicht :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
Dies wird im sicheren Format ausgegeben :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
Dies ist vergleichbar mit der Verwendung parametrisierter SQL- Abfragen , um eine Injektion zu vermeiden .
Ich verwende hier dateeine Befehlsersetzung oder in Anführungszeichen anstelle des rmBefehls, der in Sashas Kommentar verwendet wird, da er nicht destruktiv ist.