====== 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.