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.