oelk schrieb:
Code:
sed -i s#PROXY_ENABLED=\"yes\"#PROXY_ENABLED=\"no\"# /etc/sysconfig/proxy
sed -i s#HTTP_PROXY=\"http:\/\/192.168.8.9:3128\"#HTTP_PROXY=\"http:\/\/\"# /etc/sysconfig/proxy
Wenn du Konfiguration mit Script und sed in Zukunft mit weniger Problemen machen willst, oder auch mal Scripte schreiben willst die etwas mehr profihaft aussehen, hier ein paar Tips,
Nimm als Trennzeichen nicht
# oder andere Zeichen die Sonderfunktionen haben.
# hat sowohl in der Bash mit der du das Script aufrufst, wie auch in sed eine Kommentarfunktion und sowas ist nicht ganz ungefährlich, da schon kleinste Änderungen an einem eigentlich funktionieren Script ausreichend sein könnten, das das ganze in die Hose geht und eine halbe sed-Code Zeile zum Kommentar wird und dir das ganze Script crasht. (GNU)Sed nimmt hinter
s theoretisch (fast)jedesTrennzeichen, aber
# ist nicht die beste Wahl.
Standard ist
/ , das sollte man auch verwenden wenn man nicht unbedingt viel Dateinamen und bearbeiten muss, dann empfiehlt sich zum Beispiel
~ das hat dann den Vorteil das man dann
/ nicht quoten braucht. Ein anderes Trennzeichen als
/ zu verwenden und dann
/ aber trotzdem noch zu quoten zeigt das der Schreiber des Scriptes überhaupt keine wirkliche Ahnung davon hat was in der sed Zeile passiert.
Quote des gesamten sed Befehlscode, und zwar so das die Bash dort nichts ändern kann. Das erspart dir nen Haufen Probleme und dann brauchst du innerhalb des Sedcodes nicht noch mal nen Haufen nur wegen der Bash zu quoten, die Quoterei die man in Sed und bei Regulären Ausdrücken benötigt, reicht vollkommen aus, da muss man sich nicht zusätzlich nochmal das Quoten schon gequoteter Sonderzeichen zumuten.
Wenn du Konfigurationsscripte mit sed bearbeitest, dann Programmiere das in sed genauso wie es logisch Richtig ist und so wie es in der Konfiguration selbst auch ausgewertet und verwendet wird, und so wie du das auch mit Hand manuell ändern würdest. ZB alle Kommentare und Leerzeichen ignorieren. Die Konfiguratiosvariable als Suchmuster nehmen und den Wert dahinter auswerten und gegebenenfalls ersetzen und nicht die gesamte Zeile ..... usw.
wenn du mit sed und der Option -i arbeitest, dann alles in einem Schritt und sed -i nicht mehrmals hintereinander auf die selbe Datei aufrufen, das kann bisweilen auch mal Nebenwirkungen zeigen, wie du selbst auch schon bemerkt hast. Eine Sicherungskopie von Konfigurationsdateien die man per Script ändert ist sicher auch nicht schlecht. Aber dann braucht man auch -i nicht wirklich.
Berücksichtige soweit möglich alle gültigen Syntax der Konfiguration, wenn YES und yes und NO und no erlaubt ist dann solltest du auch alle Schreibweisen berücksichtigen, und wenn "192.168.1.200:8181" und "proxy.mydomain:8181" beides gültige Konfigurationsmöglichkeiten sind die du zurücksetzen willst, dann solltest du auch beides abfragen, ansonsten verlässt du dich allzuschnell darauf das dein Script funktioniert, und änderst irgendwas in deinem autoyast File oder hast einfach nur eine andere Installationsquelle die etwas anders arbeitet , und schon hast du den Salat weil dein Script nicht mehr passt und du gar nicht verstehst warum das jetzt plötzlich nichts mehr funktioniert, und du so einfach die Zusammenhänge gar nicht herstellen kannst, warum jetzt gar nichts mehr funktioniert.
In der Endkonsequenz könnte dann ein sed Aufruf in einem Bashscript durchaus auch mal so hier aussehen. (ohne Erklärung und Kommentar, der sollte natürlich auch noch rein, damit deine Urlaubsvertretung auch nachvollziehen kann was hier passieren soll). Sicherlich kompliziert anzuschauen, aber dafür eben auch etwas Universeller.
Code:
sed -i ' /^#/bA;
/^[ \t]*$/bA;
/PROXY_ENABLED/s/"YES"/"no"/i;
/HTTP_PROXY/s/= *".*:[0-9]\+"/=""/;
:A;
' /etc/sysconfig/proxy
Zum Rest deines Scripts wären durchaus auch noch ein paar Kleinigkeiten anzumerken, aber wir sind alle nicht vollkommen auf die Welt gekommen und wollen es eigentlich auch nicht alle wirklich werden.
robi