web2 logo

Artikel Links Notities

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

naar boven

term zoeken

Notitieruimte