Usando o paralelo para executar o script sem entrada

10

Estou tentando executar muitas instâncias de um script com o GNU paralelo, mas o script não aceita argumentos.

Se eu apenas executar 'foo.sh paralelo', recebo o seguinte:

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

Respostas:

10

Supondo que você queira executar dez vezes, esta sintaxe funcionará:

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

parallelprecisa de uma sequência de entrada de algum comprimento ( ::: {1..10}) E você precisa ignorar o conteúdo da sequência de entrada ( -n0), você só se importa com seu comprimento.

Seu comando original:, parallel foo.shnão contém sequência de entrada para indicar quanto paralelismo você deseja. O aviso enigmático indica que você parallelcomeçará a ouvir o terminal em busca de uma sequência de entrada e que provavelmente não é isso que você deseja.

Aqui está o exemplo do tutorial:

seq 10 | parallel -n0 my_command my_args

Como funciona:

  • parallelsempre pega uma sequência de entrada de algum lugar. Pode ser uma sequência delimitada por espaço em linha precedida por :::OU uma sequência delimitada por nova linha de um arquivo ou origem semelhante a um arquivo, como um pipe. Neste exemplo, a sequência de entrada é de um tubo.
  • seq 10 produz uma sequência de dígitos delimitada por nova linha de um a dez.
  • A -n0opção informa ao paralelo para ignorar os valores na sequência de entrada. Tudo o que nos importa é o tamanho da sequência, não o seu conteúdo. Mesmo que os dígitos não sejam usados, o comando ainda será executado dez vezes.

Outro exemplo:

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

Como funciona:

  • A sequência de entrada está embutida.
  • {1..5} produz uma sequência de dígitos delimitada por espaço de um a cinco.
  • -n0ignora os valores da sequência (e repetimos a string 'x'sempre.)
  • Resultado: xxxxx

Comparado a:

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

Como funciona:

  • A sequência de entrada está embutida.
  • {1..5} produz uma sequência de dígitos delimitada por espaço de um a cinco.
  • Cada valor da sequência de entrada é usado como argumento para echo. Pedido não garantido.
  • Saída: 43215. Pode ser qualquer ordem.
jwfearn
fonte