<Précédent | Table des matières | Suivant>
Ici Documents
Nous avons examiné deux méthodes différentes de sortie de notre texte, toutes deux utilisant le echo com
mandat. Il existe une troisième voie appelée ici document or ici script. Un document here est une forme supplémentaire de redirection d'E/S dans laquelle nous incorporons un corps de texte dans notre script et l'injectons dans l'entrée standard d'une commande. Cela fonctionne comme ceci :
commander << jeton
texte
jeton
De commander est le nom de la commande qui accepte l'entrée standard et jeton est une chaîne utilisée pour indiquer la fin du texte incorporé. Nous allons modifier notre script pour utiliser un document ici :
#! / Bin / bash
# Programme pour afficher une page d'informations système
TITLE="Rapport d'informations système pour $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="Généré $CURRENT_TIME, par $USER"
chat << _EOF_
$ TITRE
$ TITRE
$TIMESTAMP
_EOF_
#! / Bin / bash
# Programme pour afficher une page d'informations système
TITLE="Rapport d'informations système pour $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")
TIMESTAMP="Généré $CURRENT_TIME, par $USER"
chat << _EOF_
$ TITRE
$ TITRE
$TIMESTAMP
_EOF_
À la place d'utiliser echo, notre script utilise maintenant cat et un document ici. La chaîne _EOF_ (ce qui signifie « End Of File », une convention courante) a été sélectionné comme jeton et marque la fin du texte incorporé. Notez que le jeton doit apparaître seul et qu'il ne doit pas y avoir d'espace à la fin de la ligne.
Alors, quel est l'avantage d'utiliser un document here ? C'est surtout la même chose que echo, sauf que, par défaut, les guillemets simples et doubles dans les documents ici perdent leur signification particulière pour le shell. Voici un exemple de ligne de commande :
[moi@linuxbox ~]$ foo="du texte"
[moi@linuxbox ~]$ chat << _EOF_
> $foo
[moi@linuxbox ~]$ foo="du texte"
[moi@linuxbox ~]$ chat << _EOF_
> $foo
> "$foo"
> '$foo'
> \$foo
> _EOF_ un peu de texte "un peu de texte" 'un peu de texte'
$foo
> "$foo"
> '$foo'
> \$foo
> _EOF_ un peu de texte "un peu de texte" 'un peu de texte'
$foo
Comme on peut le voir, le shell ne fait pas attention aux guillemets. Il les traite comme des personnages ordinaires. Cela nous permet d'intégrer librement des citations dans un document here. Cela pourrait s'avérer utile pour notre programme de rapports.
Ici, les documents peuvent être utilisés avec n'importe quelle commande qui accepte une entrée standard. Dans cet exemple, nous utilisons un document here pour passer une série de commandes au ftp programme pour récupérer un fichier depuis un serveur FTP distant :
#! / Bin / bash
# Script pour récupérer un fichier 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_ ouvre $FTP_SERVER
utilisateur anonyme moi@linuxbox cd $FTP_PATH
hachage
obtenez $REMOTE_FILE au revoir
_EOF_
ls -l $REMOTE_FILE
#! / Bin / bash
# Script pour récupérer un fichier 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_ ouvre $FTP_SERVER
utilisateur anonyme moi@linuxbox cd $FTP_PATH
hachage
obtenez $REMOTE_FILE au revoir
_EOF_
ls -l $REMOTE_FILE
Si nous modifions l'opérateur de redirection de "<<" à "<<-", le shell ignorera les caractères de tabulation de début dans le document here. Cela permet à un document here d'être indenté, ce qui peut améliorer la lisibilité :
#! / Bin / bash
# Script pour récupérer un fichier via FTP FTP_SERVER=ftp.nl.debian.org
#! / Bin / bash
# Script pour récupérer un fichier 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_ ouvre $FTP_SERVER
utilisateur anonyme moi@linuxbox cd $FTP_PATH
hachage
obtenez $REMOTE_FILE au revoir
_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_ ouvre $FTP_SERVER
utilisateur anonyme moi@linuxbox cd $FTP_PATH
hachage
obtenez $REMOTE_FILE au revoir
_EOF_
ls -l $REMOTE_FILE