Você deve tentar usar --dryrun
quando estiver confuso com o que o GNU Parallel executa:
$ parallel --dryrun :::: ./a.sh ./a.sh
#!/bin/bash #!/bin/bash
#!/bin/bash
#!/bin/bash curl http://127.0.0.1:81/a.php
#!/bin/bash
curl http://127.0.0.1:81/a.php
curl http://127.0.0.1:81/a.php #!/bin/bash
curl http://127.0.0.1:81/a.php
curl http://127.0.0.1:81/a.php curl http://127.0.0.1:81/a.php
Isso claramente não é o que você pretendia. Então, o que está acontecendo?
Se você analisar a saída, verá que cada linha do primeiro arquivo é combinada com cada linha do segundo arquivo. É ainda mais óbvio com:
file-b:
1
2
3
$ parallel --dryrun :::: b b
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
O erro está em ::::
. ::::
faz o GNU Parallel ler o conteúdo do arquivo como argumentos. E desde que você deu 2 arquivos, ele faz o produto cruzado deles.
O que você queria era :::
:
$ parallel --dryrun ::: ./a.sh ./a.sh
./a.sh
./a.sh