Je connais cette syntaxe:
cmd1 << EOF | cmd2
text
EOF
mais vient de découvrir que bash me permet d'écrire:
cmd1 << EOF |
text
EOF
cmd2
(l'hérédoc est utilisé comme entrée dans cmd1 et la sortie de cmd1 est acheminée vers cmd2). Cela semble être une syntaxe très étrange. Est-ce portable?
big-long-command1 with lots of args << EOF | big-long-command2 with lots of args
. La "syntaxe étrange" semble être le meilleur moyen.Réponses:
Oui, le standard POSIX le permet. Selon la version 2008:
Et inclut cet exemple de plusieurs "ici-documents" dans la même ligne:
Il n'y a donc aucun problème à faire des redirections ou des tubes. Votre exemple est similaire à quelque chose comme ceci:
Et la grammaire du shell (plus bas sur la page liée) comprend ces définitions:
Ainsi, un symbole de tuyau peut être suivi d'une fin de ligne et être toujours considéré comme faisant partie d'un pipeline.
la source
Oui, c'est dans la grammaire du shell POSIX. Vous pouvez également avoir plus d'un here-doc pour la même commande (certains autres exemples utilisent deux
cat
invocations, mais cela fonctionne aussi):C'est artificiel (en utilisant 2 here-docs pour stdin), mais si vous pensez à fournir une entrée pour différents descripteurs de fichiers, cela a tout de suite un sens.
Il y a aussi la possibilité de supprimer le
cat
tout . Pourquoi ne pas rendre le document ici directement disponible pourcmd
:la source
sudo tee /etc/securefile.conf <<EOF
.Hmm, je suppose que oui, d'après le test en bash en mode POSIX:
la source
EOF
. L'invite se comportera étrangement et vous vous demanderez ce qui ne va pasBonjour, vérifiez ceci, par exemple
Cordialement
la source