Here documents (<<), Here strings (<<<) y el comando "read"

bash

<< (Here documents)

Un here document es un tipo de redirección que le dice al shell que vaya leyendo el input que se le está pasando hasta encontrar una determinada palabra clave (‘TAG’ en el ejemplo).

Consiste, pues, en un bloque de código cuyas líneas se pasan una a una a un comando o programa interactivo (como ftp o cat). Podemos usar cualquier TAG para indicar el final del bloque que compone el here document, pese a que se suele usar “EOF”, pero podríamos usar cualquier cosa, mientras estemos seguros de que será una cadena de carácteres que no se usará dentro del bloque que queremos procesar.

Un posible uso es el de añadir un bloque de líneas a un fichero. Cabe decir que el here document incluirá los espacios/tabs de inicio de cada línea. Si no es lo que quieres, puedes eliminar los tabs de inicio de línea al procesar el here document añadiéndo un “-” justo tras la redirección y antes del tag (quedaría “<<-"). Aquí un ejemplo manteniendo tabs y usando variables dentro del bloque:

Otro ejemplo, quizá más interesante, es el de interactuar desde un script bash via telnet contra un mail server, o contra un servidor FTP pasándole en cada línea el comando a ejecutar. Copio el ejemplo directamente de The Linux Document Project:

Hay muchas otras situaciones en las que un here document puede ser útil, así que mírate la documentación.

<<< (Here strings)

Un here string consiste en un COMMAND <<<$WORD, donde $WORD se pasa expandido como stdin a COMMAND.

Copio otro ejemplo de la documentación:

Los here strings resultan especialmente interesantes cuando se combinan con el comando "read“, el cual puede hacer uso de la variable especial “IFS” como delimitador. Todo junto, nos permite escribir código como el siguiente:

La verdad es que me encontré con un código como el anterior revisando unos scripts, y me pareció suficientemente interesante como para escribir un pequeño post sobre ello, pues no suelo usar here documents o here strings en mis scripts y va bien tenerlos presentes. En fín, el código anterior, si se ejecuta, nos dará como resultado lo siguiente:

Fuentes:
http://superuser.com/questions/342982/is-there-a-binary-safe-triple-less-than-operator-in-bash#343056
http://tldp.org/LDP/abs/html/here-docs.html
http://www.tldp.org/LDP/abs/html/x17837.html

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *