bash sh xargs

bash - xargs grep



Llamar a funciones de shell con xargs (4)

Algo así debería funcionar también:

function testing() { sleep $1 ; } echo {1..10} | xargs -n 1 | xargs -I@ -P4 bash -c "$(declare -f testing) ; testing @ ; echo @ "

Estoy tratando de usar xargs para llamar a una función más compleja en paralelo.

#!/bin/bash echo_var(){ echo $1 return 0 } seq -f "n%04g" 1 100 |xargs -n 1 -P 10 -i echo_var {} exit 0

Esto devuelve el error

xargs: echo_var: No such file or directory

Cualquier idea sobre cómo puedo usar xargs para lograr esto, o cualquier otra solución sería bienvenida.


El uso de GNU Parallel se ve así:

#!/bin/bash echo_var(){ echo $1 return 0 } export -f echo_var seq -f "n%04g" 1 100 | parallel -P 10 echo_var {} exit 0

Si usa la versión 20170822, ni siquiera tiene que export -f , siempre y cuando haya ejecutado esto:

. `which env_parallel.bash` seq -f "n%04g" 1 100 | env_parallel -P 10 echo_var {}


La exportación de la función debería hacerlo (no probado):

export -f echo_var seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c ''echo_var "$@"'' _ {}

Puede usar el printf incorporado en lugar del seq externo:

printf "n%04g/n" {1..100} | xargs -n 1 -P 10 -I {} bash -c ''echo_var "$@"'' _ {}

Además, el uso de return 0 y exit 0 like enmascara cualquier valor de error que pueda producir el comando que lo precede. Además, si no hay ningún error, es el predeterminado y por lo tanto algo redundante.


Tal vez esta sea una mala práctica, pero si define funciones en un .bashrc u otro script, puede envolver el archivo o al menos las definiciones de función con una configuración de allexport :

set -o allexport function funcy_town { echo ''this is a function'' } function func_rock { echo ''this is a function, but different'' } function cyber_func { echo ''this function does important things'' } function the_man_from_funcle { echo ''not gonna lie'' } function funcle_wiggly { echo ''at this point I/'m doing it for the funny names'' } function extreme_function { echo ''goodbye'' } set +o allexport