GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Heredoc

Lors de l'écriture de scripts shell, vous pouvez vous trouver dans une situation où vous devez passer un bloc de texte ou de code multiligne à une commande interactive, telle que tee , cat , ou sftp .

Dans Bash et d'autres shells comme Zsh, un document Here (Heredoc) est un type de redirection qui vous permet de transmettre plusieurs lignes d'entrée à une commande.

La syntaxe d'écriture de HereDoc prend la forme suivante :

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER
  • La première ligne commence par une commande facultative suivie de l'opérateur de redirection spécial << et l'identifiant de délimitation.
    • Vous pouvez utiliser n'importe quelle chaîne comme identifiant de délimitation, les plus couramment utilisés sont EOF ou END.
    • Si l'identifiant de délimitation n'est pas entre guillemets, le shell substituera toutes les variables, commandes et caractères spéciaux avant de passer les lignes ici-document à la commande.
    • Ajouter un signe moins à l'opérateur de redirection <<- , entraînera l'ignorance de tous les caractères de tabulation de tête. Cela vous permet d'utiliser l'indentation lors de l'écriture de documents ici dans des scripts shell. Les caractères d'espacement au début ne sont pas autorisés, uniquement les tabulations.
  • Le bloc here-document peut contenir des chaînes, des variables, des commandes et tout autre type d'entrée.
  • La dernière ligne se termine par l'identifiant de délimitation. L'espace blanc devant le délimiteur n'est pas autorisé.

Exemples Heredoc de base #

Dans cette section, nous examinerons quelques exemples de base d'utilisation d'heredoc.

Heredoc est le plus souvent utilisé en combinaison avec la commande cat.

Dans l'exemple suivant, nous transmettons deux lignes de texte contenant une variable d'environnement et une commande à cat en utilisant un document ici.

cat << EOF
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Comme vous pouvez le voir dans la sortie ci-dessous, la variable et la sortie de la commande sont remplacées :

The current working directory is: /home/linuxize
You are logged in as: linuxize

Voyons ce qui se passera si nous plaçons le délimiteur entre guillemets simples ou doubles.

cat <<- "EOF"
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Vous pouvez remarquer que lorsque le délimiteur est entre guillemets, aucune extension de paramètre et aucune substitution de commande ne sont effectuées par le shell.

The current working directory is: $PWD
You are logged in as: $(whoami)

Si vous utilisez un heredoc dans une instruction ou une boucle, utilisez le <<- opération de redirection qui permet d'indenter votre code.

if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi
Line with a leading tab.

Au lieu d'afficher la sortie à l'écran, vous pouvez la rediriger vers un fichier en utilisant le > , >> opérateurs.

cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Si le fichier.txt n'existe pas, il sera créé. Lors de l'utilisation de > le fichier sera écrasé, tandis que le >> ajoutera la sortie au fichier.

L'entrée heredoc peut également être canalisée. Dans l'exemple suivant, le sed La commande remplacera toutes les instances de l caractère avec e :

cat <<'EOF' |  sed 's/l/e/g'
Hello
World
EOF
Heeeo
Wored

Pour écrire les données canalisées dans un fichier :

cat <<'EOF' |  sed 's/l/e/g' > file.txt
Hello
World
EOF

Utiliser Heredoc avec SSH #

Utiliser Heredoc est l'un des moyens les plus pratiques et les plus simples d'exécuter plusieurs commandes sur un système distant via SSH.

Lorsque vous utilisez un délimiteur sans guillemets, assurez-vous d'échapper toutes les variables, commandes et caractères spéciaux, sinon ils seront interpolés localement :

ssh -T [email protected] << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: \$PWD"
EOF
The current local working directory is: /home/linuxize
The current remote working directory is: /home/user

Vous pouvez également configurer une authentification basée sur une clé SSH et vous connecter à vos serveurs Linux sans saisir de mot de passe.

Conclusion #

Dans ce guide, vous avez appris ce qu'est heredoc et comment l'utiliser dans vos scripts shell.

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.


Linux
  1. La commande "eval" dans Bash ?

  2. bash sh - commande introuvable

  3. Bash - Commande de date et espace

  4. Exécutez la commande bash sur le pipeline jenkins

  5. Bash si sur une seule ligne

Commande d'historique sous Linux (historique de bash)

Commande de sortie Bash et codes de sortie

Commande Bash printf

Tutoriel Bash Heredoc pour les débutants

Script bash (II)

Script bash (III)