Ici document (Heredoc) est un littéral de flux d’entrée ou de fichier qui est traité comme un bloc de code spécial. Ce bloc de code sera transmis à une commande pour traitement. Heredoc provient de UNIX coquillages et peuvent être trouvés dans shells Linux populaires comme sh, tcsh, ksh, bash, zsh, csh. Notamment, d’autres langages de programmation comme Perl, Ruby, PHP prennent également en charge heredoc.
Structure de Herdoc
Heredoc utilise 2 équerres (<<)
suivi d’un jeton délimiteur. Le même jeton délimiteur sera utilisé pour terminer le bloc de code. Tout ce qui entre dans le délimiteur est considéré comme un bloc de code.
Regardez l’exemple ci-dessous. Je redirige le bloc de code vers le commande de chat. Ici, le délimiteur est défini sur « BLOQUER« Et terminé par le même »BLOQUER«.
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
REMARQUE: Vous devez utiliser le même jeton de délimitation pour démarrer le bloc et terminer le bloc.
Créer des commentaires multilignes
Si vous codez à un moment donné en bash maintenant, vous savez peut-être que bash par défaut ne prend pas en charge les commentaires multilignes comme C ou Java. Vous pouvez utiliser HereDoc pour surmonter cela.
Ce n’est pas une fonctionnalité intégrée de bash prenant en charge les commentaires sur plusieurs lignes, mais juste un hack. Si vous ne redirigez pas heredoc à n’importe quelle commande, l’interpréteur lira simplement le bloc de code et n’exécutera rien.
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
Gérer les espaces blancs
Par défaut, heredoc ne supprimera aucun espace blanc (tabulations, espaces). Nous pouvons remplacer ce comportement en ajoutant dash (-)
après (<<)
suivi d’un délimiteur. Cela supprimera tous les espaces de tabulation mais les espaces blancs ne seront pas supprimés.
cat <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCK
Substiution de variable et de commande
Heredoc accepte la substitution de variables. Les variables peuvent être des variables définies par l’utilisateur ou des variables d’environnement.
TODAY=$(date +%F) cat << BLOCK1 # User defined variables Today date is = ${TODAY} #Environ Variables I am running as = ${USER} My home dir is = ${HOME} I am using ${SHELL} as my shell BLOCK1
De même, vous pouvez exécuter toutes les commandes dans le heredoc bloc de code.
cat << BLOCK2 $(uname -a) BLOCK2
Échapper aux caractères spéciaux
Il existe plusieurs façons d’échapper aux caractères spéciaux. Soit vous pouvez le faire au niveau du personnage, soit au niveau doc.
Pour échapper des caractères spéciaux individuels, utilisez un barre oblique inverse ().
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
Pour échapper tous les caractères spéciaux à l’intérieur du bloc, entourez le délimiteur avec des guillemets simples, des guillemets doubles ou un délimiteur de préfixe avec une barre oblique inverse.
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << BLOCK3 I am running as = ${USER} BLOCK3
Maintenant que nous connaissons la structure de heredoc et comment cela fonctionne, voyons quelques exemples. Deux espaces communs où j’utilise heredoc sommes exécution d’un bloc de commandes via SSH et en passant des requêtes SQL via heredoc.
Dans l’exemple ci-dessous, nous essayons d’exécuter un bloc de code dans un serveur distant via SSH.
Dans l’exemple ci-dessous, je passe un sélectionner déclaration à psql pour vous connecter à une base de données et exécuter la requête. Il s’agit d’une autre manière d’exécuter une requête dans psql à l’intérieur du script bash au lieu d’utiliser le -f
drapeau à exécuter .sql déposer.
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
Voilà pour cet article. Vous pouvez faire beaucoup plus avec heredoc par rapport à ce que nous avons montré dans les exemples. Si vous avez un hack utile avec heredoc veuillez l’afficher dans la section des commentaires afin que nos lecteurs puissent en profiter.
Si vous appréciez ce que nous faisons ici sur TecMint, vous devriez considérer:
TecMint est le site communautaire à la croissance la plus rapide et le plus fiable pour tout type d’articles, de guides et de livres Linux sur le Web. Des millions de personnes visitent TecMint! pour rechercher ou parcourir les milliers d’articles publiés disponibles GRATUITEMENT à tous.
Si vous aimez ce que vous lisez, pensez à nous acheter un café (ou 2) en guise de remerciement.
Nous sommes reconnaissants pour votre soutien sans fin.
.