<Anterior | Contenido | Siguiente>
Aquí Documentos
Hemos analizado dos métodos diferentes para generar nuestro texto, ambos usando el echo com
mand. Hay una tercera forma llamada aquí documento or aquí guión. Un documento aquí es una forma adicional de redirección de E / S en la que incrustamos un cuerpo de texto en nuestro script y lo introducimos en la entrada estándar de un comando. Funciona así:
comando << ficha
texto
ficha
donde comando es el nombre del comando que acepta entrada estándar y ficha es una cadena que se utiliza para indicar el final del texto incrustado. Modificaremos nuestro script para usar un documento aquí:
#! / Bin / bash
# Programa para generar una página de información del sistema
TITLE = "Informe de información del sistema para $ HOSTNAME" CURRENT_TIME = $ (fecha + "% x% r% Z")
TIMESTAMP = "Generado $ CURRENT_TIME, por $ USER"
gato << _EOF_
$ TITLE
$ TITLE
$ TIMESTAMP
_EOF_
#! / Bin / bash
# Programa para generar una página de información del sistema
TITLE = "Informe de información del sistema para $ HOSTNAME" CURRENT_TIME = $ (fecha + "% x% r% Z")
TIMESTAMP = "Generado $ CURRENT_TIME, por $ USER"
gato << _EOF_
$ TITLE
$ TITLE
$ TIMESTAMP
_EOF_
En lugar de usar echo, nuestro script ahora usa gato y un documento aquí. La cuerda _EOF_ (que significa "Fin de archivo", una convención común) se seleccionó como el token y marca el final del texto incrustado. Tenga en cuenta que el token debe aparecer solo y que no debe haber espacios al final de la línea.
Entonces, ¿cuál es la ventaja de usar un documento aquí? Es casi lo mismo que echo, excepto que, por defecto, las comillas simples y dobles dentro de estos documentos pierden su significado especial para el shell. Aquí hay un ejemplo de línea de comando:
[yo @ linuxbox ~] $ foo = "algo de texto"
[yo @ linuxbox ~] $ gato << _EOF_
> $ foo
[yo @ linuxbox ~] $ foo = "algo de texto"
[yo @ linuxbox ~] $ gato << _EOF_
> $ foo
> "$ foo"
> '$ foo'
> \ $ foo
> _EOF_ algún texto "algún texto" 'algún texto'
$ foo
> "$ foo"
> '$ foo'
> \ $ foo
> _EOF_ algún texto "algún texto" 'algún texto'
$ foo
Como podemos ver, el caparazón no presta atención a las comillas. Los trata como personajes ordinarios. Esto nos permite incrustar citas libremente dentro de un documento aquí. Esto podría resultar útil para nuestro programa de informes.
Aquí los documentos se pueden utilizar con cualquier comando que acepte entradas estándar. En este ejemplo, usamos un documento here para pasar una serie de comandos al ftp programa para recuperar un archivo de un servidor FTP remoto:
#! / Bin / bash
# Script para recuperar un archivo vía FTP FTP_SERVER = ftp.nl.debian.org
FTP_PATH = / debian / dists / lenny / main / installer-i386 / current / images / cdrom REMOTE_FILE = debian-cd_info.tar.gz
ftp -n << _EOF_ abrir $ FTP_SERVER
usuario anónimo yo @ linuxbox cd $ FTP_PATH
hachís
obtener $ REMOTE_FILE adiós
_EOF_
ls -l $ REMOTE_FILE
#! / Bin / bash
# Script para recuperar un archivo vía FTP FTP_SERVER = ftp.nl.debian.org
FTP_PATH = / debian / dists / lenny / main / installer-i386 / current / images / cdrom REMOTE_FILE = debian-cd_info.tar.gz
ftp -n << _EOF_ abrir $ FTP_SERVER
usuario anónimo yo @ linuxbox cd $ FTP_PATH
hachís
obtener $ REMOTE_FILE adiós
_EOF_
ls -l $ REMOTE_FILE
Si cambiamos el operador de redirección de “<<” a “<< -”, el shell ignorará los caracteres de tabulación iniciales en el documento here. Esto permite sangrar un documento aquí, lo que puede mejorar la legibilidad:
#! / Bin / bash
# Script para recuperar un archivo vía FTP FTP_SERVER = ftp.nl.debian.org
#! / Bin / bash
# Script para recuperar un archivo vía FTP FTP_SERVER = ftp.nl.debian.org
FTP_PATH = / debian / dists / lenny / main / installer-i386 / current / images / cdrom REMOTE_FILE = debian-cd_info.tar.gz
ftp -n << - _EOF_ abrir $ FTP_SERVER
usuario anónimo yo @ linuxbox cd $ FTP_PATH
hachís
obtener $ REMOTE_FILE adiós
_EOF_
ls -l $ REMOTE_FILE
FTP_PATH = / debian / dists / lenny / main / installer-i386 / current / images / cdrom REMOTE_FILE = debian-cd_info.tar.gz
ftp -n << - _EOF_ abrir $ FTP_SERVER
usuario anónimo yo @ linuxbox cd $ FTP_PATH
hachís
obtener $ REMOTE_FILE adiós
_EOF_
ls -l $ REMOTE_FILE