GNU "parallelpipepipe" ne traite pas stdin par lignes
Je suis super confus sur la façon d'utiliser GNU parallel pour passer stdin à la commande job.
J'ai ce que j'imaginais être un vraiment cas d'utilisation courant. J'ai un processus xxd
qui fait quelque chose avec stdin et sort vers stdout. J'ai un moyen de générer ou d'obtenir du travail à partir d'un autre flux standard, par exemple seq 3
, et je peux combiner les deux et créer un outil électrique impromptu comme ceci:
$ seq 3 | while read line; do echo $line | xxd; done
00000000: 310a 1.
00000000: 320a 2.
00000000: 330a 3.
Génial. Nous pouvons clairement voir que chaque invocation of xxd
obtient une ligne, et une nouvelle ligne de fin est ajoutée.
Voici ce que fait la tuyauterie vers parallel
:
$ seq 3 | parallel --pipe --recend="n" -L 1 xxd
...
00000000: 310a 320a 330a 1.2.3.
parallel --pipe
prend tout stdin et l'envoie à une invocation de xxd
ce qui me confond car tous les paramètres documentés et leurs valeurs par défaut semblent contredire ce comportement: --recend="n"
(la valeur par défaut) délimite les travaux par une nouvelle ligne, -L 1
(la valeur par défaut) envoie un maximum d'une ligne à la commande.
Les séparateurs nuls ont le même problème. Ils sont également passés mot de passe :
seq 3 | tr 'n' '' | parallel --null --pipe xxd
...
00000000: 3100 3200 3300 1.2.3.
Une explication de ce comportement serait appréciée, d'autant plus que ces paramètres semblent s'appliquer spécifiquement au mode --pipe
de parallel
.