web-dev-qa-db-fra.com

Que fait << EOF?

Je suis un débutant dans l'administrateur Linux. Pendant que j'apprends à GDB à déboguer mon code, je dois créer un fichier input.txt que mon programme lira. Je connais des symboles de redirection tels que >, >> and <, mais je n'ai pas trouvé d'informations sur Google à propos de << car Google l'ignore. Quelqu'un pourrait-il expliquer ce que <<EOF fait ci-dessous? Merci.

cat >input.txt <<EOF
8
LED Fantom

Un extrait de l'article :

Ici le document

Un document here est utilisé pour rediriger les entrées dans un script ou un programme interactif de Shell.

Nous pouvons exécuter un programme interactif au sein d'un script Shell sans intervention de l'utilisateur en fournissant les entrées requises pour le programme interactif ou un script Shell interactif.

La forme générale pour un document ici est -

commande << délimiteur délimiteur de document Ici, le shell interprète l'opérateur << en tant qu'instruction de lecture d'une entrée jusqu'à ce qu'il trouve une ligne contenant le délimiteur spécifié. Toutes les lignes d'entrée jusqu'à la ligne contenant le délimiteur sont ensuite introduites dans l'entrée standard de la commande.

Le délimiteur informe le shell que le document ici est terminé. Sans cela, le shell continue à lire les entrées pour toujours. Le délimiteur doit être un seul mot qui ne contient ni espace ni tabulation.

Voici l’entrée dans la commande wc -l pour compter le nombre total de lignes -

$wc -l << EOF
    This is a simple lookup program 
    for good (and bad) restaurants
    in Cape Town.
EOF
3
$

Vous pouvez utiliser ici le document pour imprimer plusieurs lignes en utilisant votre script comme suit -

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF 

Cela produirait le résultat suivant -

Il s'agit d'un programme de recherche simple pour les bons (et les mauvais) restaurants du Cap. Le script suivant exécute une session avec l'éditeur de texte vi et enregistre l'entrée dans le fichier test.txt.

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a Shell script
^[
ZZ
EndOfCommands

Si vous exécutez ce script avec vim agissant en tant que vi, vous verrez probablement un résultat ressemblant à ceci:

$ sh test.sh
Vim: Warning: Input is not from a terminal
$

Après avoir exécuté le script, les éléments suivants devraient être ajoutés au fichier test.txt -

$ cat test.txt
This file was created automatically from
a Shell script
$
8
user373230