====== Standardeingabe über das BashSkript ======
Möchte man eine die Eingabe für ein Programm gleich im Skript halten, so erlauben die [[bash:redirection|Dateiumleitungen]] das Einlesen von Daten aus einer Datei. Nun könnte man die Eingabe erst in eine Datei schreiben und diese dann wieder einlesen:
echo "Hallo proggen.org" > datei.txt
cat < datei.txt
Die [[bash:Pipe]] bietet sich hier natürlich auch an:
echo "Hallo proggen.org" | cat;
Doch es gibt noch eine dritte Möglichkeit, die gerade wenn es um lange Texte oder Daten geht, komfortabler ist: Die sogenannten HERE-Skripts. Hierbei werden Daten bis zu einem bekannten Endpunkt geschrieben.
Die Eingaben werden direkt ins Skript geschrieben. Dies geht mit dem "<<"-Operator:
cat << ENDOFDATA
Hallo proggen.org
ENDOFDATA
Hier wird bis zum Vorkommen der Zeichenkette ''ENDOFDATA'' alles in die Standardeingabe von cat gepumpt. Wichtig ist hierbei natürlich, dass der Text ''ENDOFDATA'' im Datenbereich nicht vorkommt.
Dabei werden auch automatisch Substitutionen durchgeführt:
USER="proggen.org"
cat << ENDOFDATA
Hallo $USER
ENDOFDATA
ergibt ''Hallo proggen.org''.
Möchte man Variablen-Substitutionen vermeiden, so setzt man die Endmarke nach dem "<<"-Operator in Anführungszeichen:
USER="proggen.org"
cat << 'ENDOFDATA'
Hallo $USER
ENDOFDATA
ergibt ''Hallo $USER''.
Die Daten werden genauso übertragen, wie sie im Skript stehen. Das bedeutet, das voranstehende Leerzeichen und Tabulatoren ebenfalls so übertragen werden. Die BaSh kann diese voranstehenden Whitespaces herausfiltern, wenn hierfür der "<<-"-Operator verwendet wird.
===== Komplexeres Beispiel =====
Nützlich ist diese Art Eingabe zum Beispiel beim Arbeiten mit einer chroot Umgebung innerhalb eines Skripts.
cp /etc/resolv.conf ort/etc
mount -t proc -o bind /proc ort/proc
mount -o bind /dev/pts ort/dev/pts
chroot ort/ /bin/bash <
Dies eignet sich zum Beispiel zur Skript-gesteuerten Bearbeitung von LiveCD-Images.