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 o 'parallel foo.sh', recebo isto:

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
    
por user1700840 06.06.2013 / 16:28

2 respostas

9

Supondo que você deseja executar dez vezes, essa sintaxe funcionará:

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

parallel precisa 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 o tamanho dela.

Seu comando original: parallel foo.sh , não contém seqüência de entrada para indicar quanto paralelismo você deseja. O aviso enigmático está dizendo a você que parallel vai começar a escutar o terminal em busca de uma sequência de entrada, e que isso provavelmente não é o que você deseja.

Aqui está o exemplo do tutorial:

seq 10 | parallel -n0 my_command my_args

Como funciona:

  • parallel sempre recebe uma sequência de entrada de algum lugar. Ele pode ser uma seqüência delimitada por espaço in-line precedida por ::: OR uma sequência delimitada por nova linha de um arquivo ou origem de arquivo, como um canal. Neste exemplo, a sequência de entrada é de um pipe.
  • seq 10 produz uma sequência de dígitos delimitada por nova linha de um a dez.
  • A opção -n0 informa a paralela para ignorar os valores na sequência de entrada. Tudo o que nos interessa é o comprimento 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 é inline.
  • {1..5} produz uma sequência de dígitos delimitada por espaço de um a cinco.
  • -n0 ignora os valores da sequência (e, em vez disso, exibimos a string 'x' a cada vez).
  • Saída: xxxxx

Compare com:

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

Como funciona:

  • A sequência de entrada é inline.
  • {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 um argumento para echo . Encomenda não garantida.
  • Saída: 43215 . Poderia ser qualquer ordem.
por 29.05.2014 / 21:47
1

Você leu os exemplos no manual? Especificamente link

    
por 07.06.2013 / 13:27

Tags