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.

Publicité

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
Commentaires Multilignes
Commentaires Multilignes

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
Gestion Des Espaces
Gestion Des Espaces

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
Substitution De Variable Et De Commande
Substitution De Variable Et De Commande

É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
Échapper Aux Caractères Spéciaux
Échapper Aux Caractères Spéciaux

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.

Exécution De Commandes Via Ssh
Exécution De Commandes 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
Exécution De Sql Query
Exécution De Sql Query

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.

Soutenez-Nous

Nous sommes reconnaissants pour votre soutien sans fin.

.

Rate this post
Publicité
Article précédentKrafton, propriétaire de PUBG, prend une participation minoritaire dans Nodwin Gaming pour Rs 164 crore
Article suivantOnePlus Nord, Realme X7 Pro, Mi 10T et plus
Avatar De Violette Laurent
Violette Laurent est une blogueuse tech nantaise diplômée en communication de masse et douée pour l'écriture. Elle est la rédactrice en chef de fr.techtribune.net. Les sujets de prédilection de Violette sont la technologie et la cryptographie. Elle est également une grande fan d'Anime et de Manga.

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici