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 printf
anstelle 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 0
und auf exit 0
diese 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 date
eine Befehlsersetzung oder in Anführungszeichen anstelle des rm
Befehls, der in Sashas Kommentar verwendet wird, da er nicht destruktiv ist.