L'exportation de la fonction devrait le faire (non testé):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Vous pouvez utiliser le builtin printf
au lieu de l'externe seq
:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
De plus, utiliser return 0
et exit 0
comme ça masque toute valeur d'erreur qui pourrait être produite par la commande la précédant. De plus, s'il n'y a pas d'erreur, c'est la valeur par défaut et donc quelque peu redondante.
@phobic mentionne que la commande Bash pourrait être simplifiée à
bash -c 'echo_var "{}"'
déplacer le {}
directement à l'intérieur. Mais il est vulnérable à l'injection de commandes comme le souligne @Sasha.
Voici un exemple des raisons pour lesquelles vous ne devriez pas utiliser le format intégré:
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
Un autre exemple de pourquoi pas :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
Voici ce qui est produit en utilisant le format sécurisé :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
Ceci est comparable à l'utilisation de requêtes SQL paramétrées pour éviter l' injection .
J'utilise date
dans une substitution de commande ou entre guillemets échappés ici au lieu de la rm
commande utilisée dans le commentaire de Sasha car elle est non destructive.