it-swarm.com.de

Wie kann ich in bash Text in eine Datei schreiben, während der vorherige Inhalt erhalten bleibt?

Ich habe versucht, ein Bash Shell-Skript zu erstellen, mit dem eine Datei mit dem Namen list erstellt und geändert werden kann. Eigentlich ist es mein Ziel mit dem Programm, Namen an eine Liste anzuhängen und die Datei mit einem Header zu erstellen (falls erforderlich).

Derzeit schlägt das Skript jedoch an einer bestimmten Stelle fehl: Wenn ich das Skript erneut ausführe, verschwindet der alte Name und wird durch den gerade eingegebenen Namen ersetzt. Wie kann ich das lösen?

Mein Drehbuch:

#!/bin/bash
#Please sign your name here.

echo "Hi, what's your name?"
read name
echo "Hi $name, welcome to the Linux course!"

echo Course Attendees > list
echo $name >> list

Beispiel für ein Problem:

$ bash list.sh
Hi, what's your name?
Test
Hi Test, welcome to the Linux course!

$ cat list
Course Attendees
Test

$ bash list.sh
Hi, what's your name?
Test2
Hi Test, welcome to the Linux course!

$ cat list
Course Attendees
Test2
2
Mike02x

In Bash gibt es zwei Möglichkeiten zum Schreiben in eine Datei (technisch gesehen gibt es viel mehr, aber für diese Antwort gibt es in jeder Hinsicht zwei Möglichkeiten):

Zunächst einmal ist die > Operator, wie Sie in dieser Zeile verwenden:

echo Course Attendees > list

Das > Operator wird überschreiben alles, was in der Datei existiert, mit dem neuen Inhalt der Datei. Tatsächlich wird die Datei gelöscht und eine neue mit demselben Namen erstellt.

Zweitens ist die >> Operator, wie hier verwendet:

echo $name >> list

Hiermit werden anhängen Zeilen an eine vorhandene Datei angehängt oder eine neue erstellt, falls diese noch nicht vorhanden ist.

Wenn Sie Ihr Skript ausführen, überschreiben Sie Ihre Kursliste immer mit der Überschrift "Kursteilnehmer", wodurch dieser Fehler verursacht wird. Ändern Sie Ihr Programm so, dass nur Zeilen angehängt werden, wenn die Überschrift "Kursteilnehmer" vorhanden ist. Mein persönlicher Vorschlag wäre zu überprüfen, ob die Datei existiert. Verwenden Sie in diesem Fall nur die Anhängeoperation. Ansonsten geben Sie ihm den Header und erstellen Sie ihn.

Oder eleganter nur echo Course Attendees > list wenn die Datei nicht existiert. Siehe this SO answer für weitere Informationen zu wie, um einen solchen Check durchzuführen.

4
Kaz Wolfe