Estoy familiarizado con esta sintaxis:
cmd1 << EOF | cmd2
text
EOF
pero acabo de descubrir que bash me permite escribir:
cmd1 << EOF |
text
EOF
cmd2
(el heredoc se usa como entrada para cmd1, y la salida de cmd1 se canaliza a cmd2). Esto parece una sintaxis muy extraña. ¿Es portátil?
big-long-command1 with lots of args << EOF | big-long-command2 with lots of args
. La "sintaxis impar" parece ser la mejor manera.Respuestas:
Sí, el estándar POSIX lo permite. Según la versión 2008:
E incluye este ejemplo de múltiples "documentos aquí" en la misma línea:
Por lo tanto, no hay problema para hacer redirecciones o tuberías. Su ejemplo es similar a algo como esto:
Y la gramática del shell (más abajo en la página vinculada) incluye estas definiciones:
Por lo tanto, un símbolo de tubería puede ir seguido de un final de línea y aún así considerarse parte de una tubería.
fuente
Sí, está en la gramática de shell POSIX. También puede tener más de un documento aquí para el mismo comando (algunos otros ejemplos usan dos
cat
invocaciones, pero esto también funciona):Esto es artificial (usando 2 here-docs para stdin), pero si piensa proporcionar información para diferentes descriptores de archivo, tiene sentido de inmediato.
También existe la posibilidad de soltarlo por
cat
completo . ¿Por qué no hacer que el documento aquí esté directamente disponible paracmd
:fuente
sudo tee /etc/securefile.conf <<EOF
.Hmm, supongo que sí, de acuerdo con la prueba en bash en modo POSIX:
fuente
EOF
. El mensaje se comportará de manera extraña y te preguntarás qué demonios está malHola, mira esto, por ejemplo
Saludos
fuente