web-dev-qa-db-fra.com

Qu'est-ce que EOF !! dans le script bash?

Il y a une commande que je ne comprends pas:

custom_command << EOF!!

Je veux demander ce que EOF !! est dans le script bash. J'ai trouvé EOF avec Google, mais Google ignorera le "!!" automatiquement, donc je ne peux pas trouver EOF !!. 

Je connais la fin du jeton de fichier, mais je ne sais pas exactement ce que cela signifie avec "!!" dans le script. Est-ce une marque pour forcer quelque chose à faire quelque chose comme dans le wq de vim! ?

De plus, pourquoi et quand utiliser EOF !! au lieu de EOF?

12
Marcus Thornton

!! serait étendu à la dernière commande exécutée. Bash imprimera la ligne pour vous:

$ ls
a.txt  b.txt
$ cat <<EOF!!
cat <<EOFls
>

Cependant, dans un script, le développement de l'historique est désactivé par défaut. Les points d'exclamation font donc partie du mot.

#! /bin/bash
ls
cat <<EOF!!
echo 1
EOFls
echo 2

Produit:

a.txt  b.txt
script.sh: line 7: warning: here-document at line 3 delimited by end-of-file (wanted `EOF!!')
echo 1
EOFls
echo 2

Pour activer l'historique et l'expansion de l'historique dans un script, ajoutez les lignes suivantes:

set -o history
set -H
15
choroba

Vous pouvez utiliser n'importe quelle chaîne comme ici le terminateur de document.

EOF!! est exactement ce que la personne qui a écrit le script a décidé d'utiliser.

4
jlliagre

C'est probablement juste un étrange heredoc .

Exemple:

cat << EOF!!
blabla
EOF!!

Remarque: cela ne fonctionne que dans les fichiers de script. L'analyseur en ligne de commande interprète !!.

1
Karoly Horvath

Comme d'autres l'ont déjà écrit, il s'agit d'un document ici.

Le jeton utilisé pour cela doit être choisi avec soin. comme la probabilité que le document-ici contient EOF!! est inférieure à celle de EOF elle-même, ils l'ont choisie.

Je suppose qu'ils ont vérifié que cela ne faisait pas de mal avant de l'utiliser; !! dans un script ne fait PAS référence à l'historique, mais reste tel quel.

0
glglgl