En supposant que vous souhaitiez exécuter dix fois, cette syntaxe fonctionnera:
parallel -n0 foo.sh ::: {1..10}
parallel
a besoin d'une séquence d'entrée d'une certaine longueur ( ::: {1..10}
) ET vous devez ignorer le contenu de la séquence d'entrée ( -n0
), vous ne vous souciez que de sa longueur.
Votre commande d'origine:, parallel foo.sh
ne contient aucune séquence d'entrée pour indiquer le parallélisme souhaité. L'avertissement cryptique vous indique que vous parallel
allez commencer à écouter le terminal pour une séquence d'entrée, et que ce n'est probablement pas ce que vous voulez.
Voici l'exemple de tutoriel:
seq 10 | parallel -n0 my_command my_args
Comment ça fonctionne:
parallel
prend toujours une séquence d'entrée de quelque part. Il peut s'agir d'une séquence délimitée par des espaces en ligne précédée de :::
OU une séquence délimitée par des sauts de ligne à partir d'un fichier ou d'une source semblable à un fichier telle qu'un tuyau. Dans cet exemple, la séquence d'entrée provient d'un tuyau.
seq 10
produit une séquence délimitée par des sauts de ligne de un à dix.
- L'
-n0
option indique à parallèle d'ignorer les valeurs dans la séquence d'entrée. Tout ce qui nous intéresse, c'est la longueur de la séquence, pas son contenu. Même si les chiffres ne sont pas utilisés, la commande sera toujours exécutée dix fois.
Un autre exemple:
parallel -n0 echo -n 'x' ::: {1..5}
Comment ça fonctionne:
- La séquence d'entrée est en ligne.
{1..5}
produit une séquence de chiffres de un à cinq délimitée par des espaces.
-n0
ignore les valeurs de séquence (et nous faisons écho à 'x'
chaque fois à la place.)
- Production:
xxxxx
Comparer aux:
parallel echo -n ::: {1..5}
Comment ça fonctionne:
- La séquence d'entrée est en ligne.
{1..5}
produit une séquence de chiffres de un à cinq délimitée par des espaces.
- Chaque valeur de la séquence d'entrée est utilisée comme argument pour
echo
. Commande non garantie.
- Sortie:
43215
. Pourrait être n'importe quelle commande.