<Precedenti | Contenuti | Succ.>
Qui Documenti
Abbiamo esaminato due diversi metodi di output del nostro testo, entrambi utilizzando il eco com
mand. C'è un terzo modo chiamato a qui documento or qui script. Un documento qui è una forma aggiuntiva di reindirizzamento I/O in cui incorporiamo un corpo di testo nel nostro script e lo inseriamo nell'input standard di un comando. Funziona così:
command << token
testo
token
where command è il nome del comando che accetta l'input standard e token è una stringa utilizzata per indicare la fine del testo incorporato. Modificheremo il nostro script per utilizzare un documento qui:
#! / Bin / bash
# Programma per l'output di una pagina di informazioni di sistema
TITLE="Rapporto informazioni di sistema per $HOSTNAME" CURRENT_TIME=$(data +"%x %r %Z")
TIMESTAMP="Generato $CURRENT_TIME, da $USER"
gatto << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_EOF_
#! / Bin / bash
# Programma per l'output di una pagina di informazioni di sistema
TITLE="Rapporto informazioni di sistema per $HOSTNAME" CURRENT_TIME=$(data +"%x %r %Z")
TIMESTAMP="Generato $CURRENT_TIME, da $USER"
gatto << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_EOF_
Invece di usare eco, il nostro script ora usa gatto e un documento qui. La stringa _EOF_ (che significa "Fine del file", una convenzione comune) è stato selezionato come token e contrassegna la fine del testo incorporato. Nota che il token deve apparire da solo e che non devono esserci spazi finali sulla riga.
Quindi qual è il vantaggio di utilizzare un documento qui? È per lo più lo stesso di eco, tranne che, per impostazione predefinita, le virgolette singole e doppie all'interno di qui documenti perdono il loro significato speciale per la shell. Ecco un esempio di riga di comando:
[io@linuxbox~]$ foo="un testo"
[io@linuxbox~]$ gatto << _EOF_
> $ foo
[io@linuxbox~]$ foo="un testo"
[io@linuxbox~]$ gatto << _EOF_
> $ foo
> "$pippo"
> '$pippo'
> \$pippo
> _EOF_ un po' di testo "un po' di testo" 'un po' di testo'
$ foo
> "$pippo"
> '$pippo'
> \$pippo
> _EOF_ un po' di testo "un po' di testo" 'un po' di testo'
$ foo
Come possiamo vedere, la shell non presta attenzione alle virgolette. Li tratta come personaggi ordinari. Questo ci consente di inserire liberamente le citazioni all'interno di un documento qui. Questo potrebbe rivelarsi utile per il nostro programma di report.
Qui i documenti possono essere utilizzati con qualsiasi comando che accetta input standard. In questo esempio, usiamo un documento qui per passare una serie di comandi al FTP programma per recuperare un file da un server FTP remoto:
#! / Bin / bash
# Script per recuperare un file tramite 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_ apre $SERVER_FTP
utente anonimo me@linuxbox cd $FTP_PATH
hash
prendi $REMOTE_FILE ciao
_EOF_
ls -l $FILE_REMOTO
#! / Bin / bash
# Script per recuperare un file tramite 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_ apre $SERVER_FTP
utente anonimo me@linuxbox cd $FTP_PATH
hash
prendi $REMOTE_FILE ciao
_EOF_
ls -l $FILE_REMOTO
Se cambiamo l'operatore di reindirizzamento da "<<" a "<<-", la shell ignorerà i caratteri di tabulazione iniziali nel documento qui. Ciò consente di far rientrare un documento qui, che può migliorare la leggibilità:
#! / Bin / bash
# Script per recuperare un file tramite FTP FTP_SERVER=ftp.nl.debian.org
#! / Bin / bash
# Script per recuperare un file tramite 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_ apri $FTP_SERVER
utente anonimo me@linuxbox cd $FTP_PATH
hash
prendi $REMOTE_FILE ciao
_EOF_
ls -l $FILE_REMOTO
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<- _EOF_ apri $FTP_SERVER
utente anonimo me@linuxbox cd $FTP_PATH
hash
prendi $REMOTE_FILE ciao
_EOF_
ls -l $FILE_REMOTO