Linux Textdatei MIT Inhalt erstellen?

4 Antworten

Wenn eine neue Datei erstellt wird,  hat sie zunächst immer die Länge 0.  Einzig der Inhalt macht eine Datei zu einem bestimmten Dateityp.

Die Erstellung läuft immer nach dem selben Schema ab.  Dateieintrag / -namen anlegen > Datei im Schreibmodus öffnen > Dateipositionszeiger setzen > Datenstrom (Folge von Bytes) in die Datei schreiben > Datei schliessen, Dateisysteminformationen werden aktualisiert (Attribute, Änderungszeit, Größe).

Dieses Schema verwendet jedes System, es läuft automatisch bei jeder Kopie ab,  ausser Datenbanken, bei denen die Datei immer geöffnet bleibt.

Weil das nun mal so ist, ist es nicht möglich, eine Datei zu erstellen, welche zum Zeitpunkt der Erstellung bereits einen Inhalt hat. 

Dein Wunsch wird mit einer mehrstufigen Operation realisiert, im deinem Fall könnte das eine Dateikopieropteration sein.  Du hast eine Quelldatei, welche deinen vordefinierten Inhalt hat und machst eine Kopie dieser Date zum gewünschten Ziel. 

Nun hast du die neue, NICHT leere Zieldatei mit deinem vordefinierten Inhalt. Das funktioniert natürlich auch portionsweise, wobei die Zieldatei geöffnet bleibt und immer fortgeschrieben wird. Hinzukommender Inhalt wird also immer ans Ende angehängt.  Es ist nicht möglich, mit einer Standarddateisystemoperation in eine vorhandene Datei Daten einzufügen.  Auch wenn es z.B. in einer Textverarbeitung so aussehen mag, wird dennoch kein Inhalt in einer vorhandenen Datei geändert !  Die bearbeitete Datei wird mit dem neuen Inhalt immer vollständig im Ganzen neu gespeichert und damit die vorherige Datei ersetzt.

Ich weiss ja nicht, warum deine Datei einen vordefinierten Inhalt haben und wie die Daten wieterverarbeitet werden sollen, aber vieleicht helfen dir die Infos dennoch einzuschätzen, ob dein Plan durch dieses Wissen nun in Frage gestellt ist....

GWBln  02.03.2017, 14:25

gut erklärt, aber du berücksichtigst hier nicht das Konzept der Befehls-Verkettung und den diversen Möglichkeiten einer Umleitung!

0
Jack63G  02.03.2017, 15:35
@GWBln

Ja, aber natürlich wir wissen das, aber wir wollen doch einen Einsteiger nicht gleich mit so was wie sockets, chains, pipes ....  überfordern !? 

Rein technisch funktioniert dieser Mechanismus dennoch immer genau so, auch wenn der Output eines Programmes als Input eines anderen Programmes verwendet wird, wie auch immer...

 

0

Neben der Möglichkeit mit "echo" kannst du auch mit dem "HERE_Konzept" arbeiten; gemeint ist damit, daß der Inhalt "hier" steht, also Bestandteil einer Bash-Datei:

cat > /etc/resolv.conf << EOF
search Mydomain.local
domain Mydomain.local
nameserver 192.168.1.1
EOF

Hiermit erzeuge (überschreibe) ich den Inhalt der System-Datei, welche für die Namens-Auflösung wichtig ist ... klar sollte sein, daß dies nur root darf!

Was nach dem Label "EOF" steht, inklusive den Zeilenschaltungen ... bis zum "EOF" am Ende wird in die Datei geschrieben. Die Zeichenkette EOF ist nicht vorgeschrieben, man kann weitgehend beliebig wählen.

Mit "echo -e" kann man auch mehrzeilig schreiben:

echo -e "\nerste Zeile\n\tzweite Zeile mit Tabulator\n3. Zeile" > Test.txt

In beiden Fällen arbeitet man mit Umleitungen

Woher ich das weiß:eigene Erfahrung – Intensive Beschäftigung hiermit seit etlichen Jahren

unter Bash ist das der Echo Befehl. also direkt in dein Skript

echo "hallo dieser Text kommt rein"

schreiben. natürlich gehen auch variablen:

echo "die Zahl ist $meinevariable"

Jhiva 
Fragesteller
 01.03.2017, 14:16

Das klingt doch schon mal gut! Das heisst, ich muss eine Schleife benutzen? Wie sähe dann der Befehl aus mit dem die Datei erstellt wird? mkdir -p /home/user/ordner/ordner/Blintext.txt echo "text" ?

0
GWBln  02.03.2017, 14:34
@Jhiva

letzte Zeile: Das erzeugen des Pfades und die Erzeugung der Datei sind zwei Befehle, die man mit einem ";" trennen muß.

Allerdings wir die Datei nicht im gerade erzeugten Verzeichnis angelegt, sondern im aktuellen zum Zeitpunkt der Ausführung. Erstellung und Erzeugung müßte also so ablaufen:

mkdir -p /home/user/ordner/ordner ; cd /home/user/ordner/ordner ; echo Text > Blindtext.txt

3 Befehle, Alternative mit zwei Befehlen:

mkdir -p /home/user/ordner/ordner ; echo Text > /home/user/ordner/ordner/Blindtext.txt
0
stever10k  01.03.2017, 14:26

Schleife nur wenn du eine Variable hast die hochzählt oder ähnlich. eine Datei erzeugt man mit touch datei.txt diese ist dann leer. man kann in die Datei anhängen per Script >> Datei.dat per Script > Datei.dat wird eine neue Datei abgelegt

1

echo "Linux Textdatei MIT Inhalt erstellen?" > Blindtext.txt

GWBln  02.03.2017, 14:01

Diese Vorgehensweise ging schon unter MSDOS! Gerade auch mal im virtuellen XP in der Konsole probiert:

Die Klammerung mit den Doppelhochkomma ist nicht erforderlich! Wenn angegeben, werden die mit in die Datei geschrieben!

0
flaglich  02.03.2017, 16:22
@GWBln

Dann hast du eine komische Schell. Bei mir landen in der Datei keine Quotes. Hab es eben noch probiert.

0