GNU paralelo no funciona en absoluto

He intentado usar GNU parallel por un tiempo, ¡pero nunca he podido hacerlo funcionar!

Por ejemplo, ejecutando (en un directorio no vacío):

ls | parallel echo # Outputs single new line ls | parallel echo echo echo # Outputs three new lines. ls | parallel echo {} # /bin/bash: {}: command not found ls | parallel echo '{}' # /bin/bash: {}: command not found ls | parallel 'echo {}' # Outputs: {} ls | parallel -IMM 'echo MM' # Outputs: MM 

Parece que simplemente está ejecutando cada argumento como un comando, lo que no tiene sentido.

He intentado bash, zsh, tcsh, csh y sh, sin éxito.

Cuando estaba a punto de terminar de escribir esta pregunta, ejecuté parallel --version versión parallel --version para informar la versión, solo para encontrar:

ADVERTENCIA: USTED ESTÁ USANDO –tollef. SI LAS COSAS ESTÁN ACTUANDO USO EXTRAÑO –gnu.

No me queda claro por qué esa bandera está configurada de manera predeterminada. No hace falta decir que usar --gnu funcionó!

Pensé que publicaría esto para ahorrarle a alguien horas de frustración y confusión.

EDITAR: para solucionar esto de forma permanente (al menos en Ubuntu), elimine el indicador --tollef en /etc/parallel/config

Dependiendo de su sistema operativo, debe verificar si realmente está ejecutando la versión de GNU.

 $ parallel --version parallel: invalid option -- '-' parallel [OPTIONS] command -- arguments for each argument, run command with argument, in parallel parallel [OPTIONS] -- commands run specified commands in parallel 

Si este es el caso, no está ejecutando la versión de GNU. Ubuntu 12.04 es así, y deberá instalar GNU paralelo de forma manual para obtener la funcionalidad que espera.

Tenía problemas paralelos como un comando externo de FREEMAT (MATLAB lookalike); el argumentoFile no se envió al comando correctamente resuelto por:

  • Añadiendo –gnu a las opciones
  • No se usa la syntax de cmdString que implica [“]

Código:

 cmdString = 'parallel --gnu command ::: '; while j<=jLength cmdString = [cmdString argumentFilePath(j,:) ' ']; j=j+1; end system(cmdString) 

Gracias por eso 🙂 También estoy en Ubuntu 12.04.