<Anterior | Conteúdo | Próxima>
Aqui Documentos
Vimos dois métodos diferentes de saída de nosso texto, ambos usando o eco com
mando Existe uma terceira via chamada aqui documentar or aqui script. Um documento here é uma forma adicional de redirecionamento de E / S em que incorporamos um corpo de texto em nosso script e o alimentamos na entrada padrão de um comando. Funciona assim:
comando << token
texto
token
onde comando é o nome do comando que aceita entrada padrão e token é uma string usada para indicar o final do texto incorporado. Modificaremos nosso script para usar um documento aqui:
#! / Bin / bash
# Programa para gerar uma página de informações do sistema
TITLE = "Relatório de informações do sistema para $ HOSTNAME" CURRENT_TIME = $ (data + "% x% r% Z")
TIMESTAMP = "Gerado $ CURRENT_TIME, por $ USER"
gato << _EOF_
$ TITLE
$ TITLE
$ TIMESTAMP
_EOF_
#! / Bin / bash
# Programa para gerar uma página de informações do sistema
TITLE = "Relatório de informações do sistema para $ HOSTNAME" CURRENT_TIME = $ (data + "% x% r% Z")
TIMESTAMP = "Gerado $ CURRENT_TIME, por $ USER"
gato << _EOF_
$ TITLE
$ TITLE
$ TIMESTAMP
_EOF_
Ao invés de usar eco, nosso script agora usa gato e um documento aqui. A corda _EOF_ (que significa “Fim do arquivo”, uma convenção comum) foi selecionado como o token e marca o final do texto incorporado. Observe que o token deve aparecer sozinho e não deve haver espaços à direita na linha.
Qual é a vantagem de usar um documento aqui? É basicamente o mesmo que eco, exceto que, por padrão, aspas simples e duplas dentro dos documentos perdem seu significado especial para o shell. Aqui está um exemplo de linha de comando:
[me @ linuxbox ~] $ foo = "algum texto"
[me @ linuxbox ~] $ gato << _EOF_
> $ foo
[me @ linuxbox ~] $ foo = "algum texto"
[me @ linuxbox ~] $ gato << _EOF_
> $ foo
> "$ foo"
> '$ foo'
> \ $ foo
> _EOF_ algum texto "algum texto" 'algum texto'
$ foo
> "$ foo"
> '$ foo'
> \ $ foo
> _EOF_ algum texto "algum texto" 'algum texto'
$ foo
Como podemos ver, o shell não dá atenção às aspas. Ele os trata como personagens comuns. Isso nos permite inserir citações livremente em um documento here. Isso pode ser útil para nosso programa de relatórios.
Aqui, os documentos podem ser usados com qualquer comando que aceite entrada padrão. Neste exemplo, usamos um documento here para passar uma série de comandos para o ftp programa para recuperar um arquivo de um servidor FTP remoto:
#! / Bin / bash
# Script para recuperar um arquivo via 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_ abre $ FTP_SERVER
usuário anônimo me @ linuxbox cd $ FTP_PATH
hash
receba $ REMOTE_FILE tchau
_EOF_
ls -l $ REMOTE_FILE
#! / Bin / bash
# Script para recuperar um arquivo via 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_ abre $ FTP_SERVER
usuário anônimo me @ linuxbox cd $ FTP_PATH
hash
receba $ REMOTE_FILE tchau
_EOF_
ls -l $ REMOTE_FILE
Se alterarmos o operador de redirecionamento de “<<” para “<< -”, o shell irá ignorar os caracteres de tabulação iniciais no documento here. Isso permite que um documento here seja recuado, o que pode melhorar a legibilidade:
#! / Bin / bash
# Script para recuperar um arquivo via FTP FTP_SERVER = ftp.nl.debian.org
#! / Bin / bash
# Script para recuperar um arquivo via 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_ abre $ FTP_SERVER
usuário anônimo me @ linuxbox cd $ FTP_PATH
hash
receba $ REMOTE_FILE tchau
_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_ abre $ FTP_SERVER
usuário anônimo me @ linuxbox cd $ FTP_PATH
hash
receba $ REMOTE_FILE tchau
_EOF_
ls -l $ REMOTE_FILE