GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser heredoc comme éditeur de texte

Il existe une fonctionnalité quelque peu obscure dans les shells Linux et Unix qui vous permet d'ouvrir une sorte de boucle do-while pour la commande cat. C'est ce qu'on appelle le heredoc , et cela vous permet d'avoir plus ou moins un éditeur de texte quel que soit le shell que vous utilisez. La syntaxe est :

$ cat << EOF >> example.txt

La chaîne au milieu est, essentiellement, une condition qui arrête la boucle. Autrement dit, si vous tapez seul sur une ligne, la boucle se termine. Pendant la boucle, tout ce que vous tapez dans votre terminal est redirigé vers le fichier de destination (dans ce cas).

Installation

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Tant que vous avez un terminal, vous avez déjà la possibilité d'initier un heredoc. J'ai utilisé cette astuce syntaxique dans Bash, tsch et Korn shell.

Utiliser Heredoc

Pour ouvrir une "session" heredoc, vous utilisez la commande cat avec une redirection qui pointe d'abord vers cat avec une chaîne de terminaison (la convention courante est EOF pour "End Of File", mais cela peut en fait être n'importe quoi). Après le mot clé de fin, vous redirigez votre sortie vers un fichier de destination. Vous pouvez ensuite taper directement dans votre terminal, en utilisant les raccourcis clavier shell les plus courants pour naviguer dans votre travail. Votre session se termine lorsque vous tapez votre chaîne de terminaison désignée sur une ligne à part. Vous savez que vous êtes dans une boucle heredoc par l'invite unique (généralement le > caractère).

$ cat << EOF >> example.txt
> Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...
>
> whatever...
>
> you want to type.
>
> EOF
$  

Tout ce que vous entrez pendant que votre terminal attend EOF est placé dans le fichier de destination. Les caractères d'invite sont omis et EOF lui-même ne fait pas partie du fichier.

Everything you type here will be placed into example.txt when I type EOF on a line by itself. Until then, you can type...

whatever...

you want to type.

De manière réaliste, vous n'allez probablement pas utiliser la syntaxe heredoc comme substitut à un bon éditeur de texte. C'est un excellent hack rapide pour entrer plus d'une ligne, mais plus de 10 lignes environ commencent à nuire à son utilité. Par exemple, vous ne pouvez pas modifier les lignes précédentes sans déclencher la fonction d'historique de votre shell. En fonction de votre shell et de sa configuration, vous pourrez peut-être monter, puis descendre pour rappeler votre texte, puis revenir en arrière dans votre texte avec Ctrl+B .

La plupart des fonctionnalités de votre shell fonctionnent comme prévu, mais il n'y a probablement pas d'annulation et très peu de récupération d'erreur.

De plus, même les installations les plus minimes sont susceptibles d'avoir au moins Vi ou ed installé.

Et pourtant heredoc est toujours utile ! C'est plus flexible que echo , et lorsque vous travaillez sur un script shell, c'est indispensable. Par exemple, imaginez que vous écrivez un script d'installation afin de pouvoir automatiser l'installation d'un ensemble d'applications personnalisées. L'une des applications n'est pas distribuée avec un .dekstop fichier, afin qu'il n'apparaisse pas dans votre menu Application. Pour résoudre ce problème, vous décidez de générer un .desktop fichier au moment de l'installation.

Plutôt que d'écrire un .desktop fichier et le transportant comme une dépendance externe pour votre script d'installation, vous pouvez utiliser heredoc dans votre script d'installation lui-même :

#!/bin/sh

VERSION=${VERSION:-x.y.z}
PKGNAM=${VERSION:-example}
PKG="${PKGNAM}"-"${VERSION}"-`arch`.tgz

# download package
wget "${PKG}"
tar txvf "${PKG}"

# use here doc to create missing .desktop file
cat << EOF >> $HOME/.local/share/applications/example.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name="${PKGNAM}"
Comment="${PKGNAM}"
Exec="${PKGNAM}" %F
EOF

# insert the rest of an install script...

Vous avez une saisie de texte automatisée dans un fichier, aucun éditeur de texte n'est impliqué (sauf celui que vous utilisez pour écrire votre script, évidemment). Voici ce que le résultat .desktop le fichier ressemble à :

[Desktop Entry]
Version=1.0
Type=Application
Name=example
Comment=example
Exec=example %F

Comme vous pouvez le voir, vous pouvez utiliser des variables dans l'heredoc, et elles sont correctement résolues. Le EOF la chaîne n'apparaît pas dans le fichier ; cela ne fait que signaler la fin de l'heredoc.

Mieux que l'écho

La technique heredoc est généralement considérée comme plus simple que echo ou printf car une fois que vous êtes "dans" le document, vous êtes libre de faire ce que vous voulez. C'est libérateur dans ce sens, mais c'est limité par rapport à un bon éditeur de texte.

Utilisez heredoc pour les notes rapides et pour les scripts shell, et ne vous demandez plus jamais comment générer dynamiquement des fichiers de configuration.


Linux
  1. Apprendre à utiliser l'éditeur de texte Sed

  2. Comment installer et utiliser les commandes de l'éditeur de texte Nano sous Linux

  3. Comment installer l'éditeur de texte Atom sur Ubuntu 18.04

  4. Comment utiliser la commande Grep pour rechercher du texte dans des fichiers

  5. Comment utiliser l'éditeur de texte dans InstantSite.

COMMENT UTILISER L'EDITEUR SED

Comment installer Atom Text Editor sur Fedora 35

Comment installer Nano Text Editor sur AlmaLinux 8

Comment installer l'éditeur de texte Atom sur AlmaLinux 8

Comment installer l'éditeur de texte Atom sur Manjaro 20

Comment supprimer le texte sélectionné dans l'éditeur vi