Android

Bash heredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

Table des matières:

Anonim

Lors de l'écriture de scripts shell, vous pouvez être 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 passer plusieurs lignes d'entrée à une commande.

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

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • La première ligne commence par une commande facultative suivie de l'opérateur de redirection spécial << et de l'identifiant de délimitation.
    • Vous pouvez utiliser n'importe quelle chaîne comme identificateur de délimitation, les plus couramment utilisés étant EOF ou END.Si l'identificateur de délimitation n'est pas cité, le shell remplacera toutes les variables, commandes et caractères spéciaux avant de passer les lignes du document ici à la commande. signe moins à l'opérateur de redirection <<- , entraînera l'ignorance de tous les caractères de tabulation de début. Cela vous permet d'utiliser l'indentation lors de l'écriture de documents ici dans des scripts shell. Les premiers espaces 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. Les espaces blancs devant le délimiteur ne sont pas autorisés.

Exemples de base Heredoc

Dans cette section, nous examinerons quelques exemples de base sur la façon d'utiliser heredoc.

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

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

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

Comme vous pouvez le voir sur 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 mettons 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 cité, aucune expansion de paramètre et substitution de commande n'est effectuée par le shell.

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

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 à l'aide des 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éé. Lorsque vous utilisez > 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, la commande sed remplacera toutes les instances du caractère l par 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

Utilisation de Heredoc avec SSH

L'utilisation de Heredoc est l'un des moyens les plus pratiques et les plus simples pour 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 entrer de mot de passe.

Conclusion

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

terminal bash