Hallo,
ich habe versucht eine Funktion für mein Script zu schreiben, die aus einer settingsdatei alle Einstellungen ausliest und diese dann in die e2 settingsdatei überträgt.
Im Prinzip klappt das auch alles, aber es gibt da ein paar Schönheitsfehler die ich nicht lösen konnte. Vielleicht habt Ihr ein paar Tips für mich
Alles anzeigen
Wenn ihr diesen Code als Script abspeichert (z.B. test.sh) und bei das script noch eine Datei mit Settings (z.B. /etc/enigma2/settings) mit dem Dateinamen src legt sollte beim ausführen des scripts eine Datei dest erzeugt werden welche den gleichen Inhalt hat wie src (ohne leerzeilen und Kommentare).
Sollte es dest schon geben werden die Settings darin aktualisiert, also nicht doppelt eingefügt.
Meine Probleme:
Mal abgesehen davon dass der code nicht schon ist, gibt es vor allem zwei Probleme die mich stören:
1. Die letzte Zeile der src datei wird nicht verarbeitet. Das kann man umgehen, indem man der src Datei als letzte Zeile eine Leerzeile einträgt, aber schön ist das nicht.
2. Wenn name oder vaule einen / enthalten mag sed das nicht. Das fällt erst auf wenn es die Einträge in dest schon gibt und diese aktualisiert werden. Ich denke man müsste alle / in name und value vor dem sed durch // ersetzen, aber ich habe das nicht hinbekommen...
Schonmal vorab Danke für Ideen dazu !
ich habe versucht eine Funktion für mein Script zu schreiben, die aus einer settingsdatei alle Einstellungen ausliest und diese dann in die e2 settingsdatei überträgt.
Im Prinzip klappt das auch alles, aber es gibt da ein paar Schönheitsfehler die ich nicht lösen konnte. Vielleicht habt Ihr ein paar Tips für mich
Shell-Script
- Add_To_Settings(){
- # DEST_FILE=/etc/enigma2/settings
- # SRC_FILE=$1/set/settings
- # test files
- DEST_FILE=./dest
- SRC_FILE=./src
- if [ -e $SRC_FILE ]
- then
- echo "$SRC_FILE existiert"
- else
- echo "$SRC_FILE existiert nicht, script kann nicht ausgefuehrt werden"
- exit
- fi
- if [ -e $DEST_FILE ]
- then
- echo "$DEST_FILE existiert"
- else
- echo "$DEST_FILE existiert nicht, wir legen es an"
- touch $DEST_FILE
- fi
- echo "Fuege settings aus $SRC_FILE in $DEST_FILE ein"
- #IFS ist eine variable fuer den line separator
- while IFS="=" read -r name value # die letzte zeile wird nicht verarbeitet
- do
- if [ "$name" != "" ] #wenn name leer ist, leerzeil einfuegen
- then
- echo "Pruefe ob $name bereits in $DEST_FILE vorhanden ist"
- if [ `grep -c "^$name=" $DEST_FILE` == 0 ] # ist das setting nicht vorhanden, dann
- then # einfach anhaengen
- echo "$name nicht in $DEST_FILE gefunden, also fuegen wir es mit dem Wert $value hinzu"
- echo "$name=$value" >> $DEST_FILE
- else # sonst suchen und ersetzen mit sed
- echo "$name wurde in $DEST_FILE gefunden, also aktualisieren wir den Wert mit $value"
- #bug: ein \ in den variablen verwirrt sed
- sed -i "s/^$name=.*/$name=$value/g" $DEST_FILE
- fi
- fi
- done < $SRC_FILE
- }
- Add_To_Settings
Wenn ihr diesen Code als Script abspeichert (z.B. test.sh) und bei das script noch eine Datei mit Settings (z.B. /etc/enigma2/settings) mit dem Dateinamen src legt sollte beim ausführen des scripts eine Datei dest erzeugt werden welche den gleichen Inhalt hat wie src (ohne leerzeilen und Kommentare).
Sollte es dest schon geben werden die Settings darin aktualisiert, also nicht doppelt eingefügt.
Meine Probleme:
Mal abgesehen davon dass der code nicht schon ist, gibt es vor allem zwei Probleme die mich stören:
1. Die letzte Zeile der src datei wird nicht verarbeitet. Das kann man umgehen, indem man der src Datei als letzte Zeile eine Leerzeile einträgt, aber schön ist das nicht.
2. Wenn name oder vaule einen / enthalten mag sed das nicht. Das fällt erst auf wenn es die Einträge in dest schon gibt und diese aktualisiert werden. Ich denke man müsste alle / in name und value vor dem sed durch // ersetzen, aber ich habe das nicht hinbekommen...
Schonmal vorab Danke für Ideen dazu !