Bash Heredoc
Het doorgeven van meerdere regels aan een interactieve opdracht kan via een Here Document blok.
Algemene vorm:
[OPDRACHT] <<[-] 'BEGRENZER'
HERE-DOCUMENT
BEGRENZER
De eerste regel begint met een optionele opdracht gevolgd door de speciale redirectie operator << en de begrenzer. Als begrenzer mag je alles gebruiken, meestal wordt EOF of END gebruikt.
Als de begrenzer niet tussen aanhalingstekens staat, dan worden variabelen die in het here-document staan vervangen door hun waarden voordat ze worden doorgegeven aan de opdracht.
Je kan regels laten inspringen in het here-document met tabs, deze kunnen worden genegeerd door de opdracht door een min-teken aan de redirectie toe te voegen: <<-. Spaties zijn hier niet toegestaan, alleen tabs.
Het here-document mag tekst, variabelen, opdrachten en andere invoer bevatten.
De laatste regel bevat de begrenzer, deze mag geen voorloopspates bevatten.
Voorbeeld:
cat << EOF
De huidige werk directory is: $PWD
Je bent ingelogd als: $(whoami)
EOF
Resultaat:
De huidige werk directory is: /home/kees
Je bent ingelogd als: kees
Als je de begrenzer tussen aanhalingstekens zet, dan krijg je dit:
cat <<- "EOF"
De huidige werk directory is: $PWD
Je bent ingelogd als: $(whoami)
EOF
Resultaat:
De huidige werk directory is: $PWD
Je bent ingelogd als: $(whoami)
De uitvoer kan ook naar een bestand worden gestuurd in plaats van naar het scherm met de redirect operators:
cat << EOF > bestand.txt
De huidige werk directory is: $PWD
Je bent ingelogd als: $(whoami)
EOF
Indien bestand.txt nog niet bestaat, dan wordt deze aangemaakt. Met > wordt het bestand overschreven als het al bestaat, met >> wordt het bestand aangevuld in plaats van overschreven.
Het doorsluizen naar en andere opdracht met een pipe is ook mogelijk:
Alle letters l vervangen door j:
cat <<'EOF' | sed 's/l/j/g'
Hallo
Wereld
EOF
Resultaat:
Hajjo
Werejd
Ook dat kan naar een bestand worden gestuurd:
cat <<'EOF' | sed 's/l/j/g' > bestand.txt
Hallo
Wereld
EOF
