Usando paralelo para ejecutar script sin entrada

10

Estoy tratando de ejecutar muchas instancias de un script con GNU paralelo, pero el script no toma argumentos.

Si solo ejecuto 'parallel foo.sh' obtengo esto:

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
usuario1700840
fuente

Respuestas:

10

Suponiendo que desea ejecutar diez veces, esta sintaxis funcionará:

parallel -n0 foo.sh ::: {1..10}

parallelnecesita una secuencia de entrada de cierta longitud ( ::: {1..10}) Y necesita ignorar el contenido de la secuencia de entrada ( -n0), solo le importa su longitud.

Su comando original: parallel foo.shno contiene ninguna secuencia de entrada para indicar cuánto paralelismo desea. La advertencia críptica le dice que parallelcomenzará a escuchar la terminal para una secuencia de entrada, y que esto probablemente no sea lo que desea.

Aquí está el ejemplo del tutorial:

seq 10 | parallel -n0 my_command my_args

Cómo funciona:

  • parallelsiempre toma una secuencia de entrada de alguna parte. Puede ser una secuencia delimitada por espacios en línea precedida por :::O una secuencia delimitada por una nueva línea de un archivo o una fuente similar a un archivo, como una tubería. En este ejemplo, la secuencia de entrada es de una tubería.
  • seq 10 produce una secuencia de dígitos delimitada por una nueva línea del uno al diez.
  • La -n0opción le dice a paralelo que ignore los valores en la secuencia de entrada. Lo único que nos importa es la longitud de la secuencia, no su contenido. Aunque los dígitos no se usan, el comando se ejecutará diez veces.

Otro ejemplo:

parallel -n0 echo -n 'x' ::: {1..5}

Cómo funciona:

  • La secuencia de entrada está en línea.
  • {1..5} produce una secuencia de dígitos delimitada por espacios de uno a cinco.
  • -n0ignora los valores de secuencia (y hacemos eco de la cadena 'x'cada vez).
  • Salida: xxxxx

Comparar con:

parallel echo -n ::: {1..5}

Cómo funciona:

  • La secuencia de entrada está en línea.
  • {1..5} produce una secuencia de dígitos delimitada por espacios de uno a cinco.
  • Cada valor de la secuencia de entrada se usa como argumento para echo. Pedido no garantizado.
  • Salida: 43215. Podría ser cualquier orden.
jwfearn
fuente