HereDoc¶
- Commande - Toute commande (chat, wc, courrier, etc.) qui accepte la redirection.
- Opérateur de redirection (
<<
) - L'opérateur par défaut pour HereDoc est**<<**
. Il redirige le bloc de code vers la commande pour le traitement. - Delimiter Token - The delimiter token denotes the start and end of the document (code block). The delimiter token can be anything but it should be identical. Typically you will see
EOF
is used as delimiter
Afficher une chaîne multi-ligne avec HereDoc¶
$ cat << EOF
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.EOF
heredoc
EOF
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.EOF
heredoc
Compter des lignes¶
$ wc -l << BLK
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.EOF
heredoc
BLK
5
Redirection et pipe¶
$ cat << EOF > /tmp/heredoc.txt
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.
EOF
$ bat /tmp/heredoc.txt
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.
Suppression des Tab¶
Faire suivre l'opérateur de redirection par "-"
$ cat <<- err_msg
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.
err_msg
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.
Expansion de variables et commandes¶
AUTHOR="OSTechNix"
cat << EOF
Author: ${AUTHOR} # USER DEFINED VARIABLE
Article: Bash Heredoc
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
EOF
Author: OSTechNix # USER DEFINED VARIABLE
Article: Bash Heredoc
I am using the /bin/zsh shell # ENV VARIABLE
bruno # EXTERNAL COMMAND
Supprimer l'expansion (cat << 'EOF'):
AUTHOR="OSTechNix"
cat << 'EOF'
Author: ${AUTHOR} # USER DEFINED VARIABLE
Article: Bash Heredoc
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
EOF
Author: ${AUTHOR} # USER DEFINED VARIABLE
Article: Bash Heredoc
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
Commentaire multi-lignes:¶
: << 'COMMENTS'
Souvent, pour s’amuser, les hommes d’équipage
Prennent des albatros, vastes oiseaux des mers,
Qui suivent, indolents compagnons de voyage,
Le navire glissant sur les gouffres amers.
COMMENTS
Echapper les caractères spéciaux:¶
# SINGLE QUOTES ESCAPE
cat << 'EOF'
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
EOF
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
# DOUBLE QUOTES ESCAPE
cat << "EOF"
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
EOF
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
# BACKSLASH ESCAPE
cat << \EOF
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
EOF
I am using the ${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
# BACKSLASH ESCAPE (one charactere)
cat << EOF
I am using the \${SHELL} shell # ENV VARIABLE
$(whoami) # EXTERNAL COMMAND
EOF
I am using the ${SHELL} shell # ENV VARIABLE
bruno # EXTERNAL COMMAND
Exemples d'utilisation:¶
$ ssh -T user@host << EOF
Command 1...
Command 2..
.....
Command N..
EOF
# add -T flag to ssh command which will disable pseudo-terminal allocation.
declare -a server=( host1 host2 host3 )
for host in ${server[@]}
do
ssh -T user@${host} << EOF
echo "Running at host - ${host}"
if [[ ! -f /home/ostechnix/test ]];then
touch /home/ostechnix/test
echo "File Created"
else
echo "File exists"
fi
EOF
done
Dernière mise à jour:
November 9, 2023