Aller au contenu

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