Marc_BlackJack_Rintsch schrieb:
Beispiel die Zuweisung eines ehemals ”harmlosen” Wertes für var wird geändert zu:
Das braucht keine Quotes,
Das halte ich für ein Gerücht.
| var=< * >
bash: Syntaxfehler beim unerwarteten Wort »newline«
|
aber man muss jetzt überall schauen wo $var oder Werte die von dem Wert von $var irgendwie abgeleitet werden verwendet werden und ob das jetzt alles entsprechend gequoted ist. Wenn man grundsätzlich quoted wo es nötig sein könnte, kann man die Änderung machen ohne das es irgendwo Probleme damit gibt.
Jemand, der nicht weiß, dass var=< * > ein Syntaxfehler ist, den sollte man prinzipiell nicht an Produktivcode heranlassen.
Das macht es dann sehr wahrscheinlich, dass das dann nicht gemacht wird, denn es ist eben doch mehr Arbeit als es gleich zu machen, denn wenn man es gleich macht, muss man die Stellen nicht erst suchen und muss sich auch nicht erst wieder in das Skript einarbeiten.
Nein. Wenn Du den Text änderst, dann hast Du ja eine Vorstellung davon, wie es bisher aussah und wie es zukünftig aussehen soll.
Fremde haben aber keine Vorstellung davon. Die Erfahrung sagt, das man spätestens nach x Monaten selbst der Fremde ist, der sich wieder in den Code einarbeiten muss. Wenn Dir das nicht so geht hast Du Glück, aber den meisten Programmierern geht es anders.
Ich muss selbst wissen, was wann gequotet werden muss und wann nicht oder ich muss zumindest wissen was ich nicht weiß, um für den Fall des Falles überprüfen zu können, ob das, was ich machen will, funktioniert. Das Quoten in der Shell ist prinzipiell schwer, daher weiß ich vieles nicht auswendig. Aber was heikel werden kann, kann ich riechen. "< * >" sieht super heikel aus - hier lauern Dateiumlenkungen und Globbing und wenn da vorher stand var="foo", jetzt steht da var="< * >", dann würde ich schauen wie $var im weiteren Verlauf benutzt wird. Dass da jemand fremdes Quotes gesetzt hat, darauf würde ich mich nicht verlassen.
Wenn derjenige nur ich selbst sein kann, vor mehr als 6 Monaten, und ich einerseits immer alles quote, was bei 3 nicht auf den Bäumen ist, und zweitens alles Scripte mit shellcheck checke, bis keine Warnungen mehr auftreten, dann weiß ich immer noch nicht, ob die Besetzung mit "< * >" harmlos ist. In anderen Fällen wie "dummes Blank.txt" wäre ich mir da dann aber relativ sicher.
Bei Skripten, die ich schreibe, weiß ich in 90% der Fälle vorher, ob da Blanks oder sonst zu maskierendes stehen darf oder nicht und schreibe das Skript dementsprechend. Und wenn ich eins ändern muss, weil ich unerwarteter Weise doch etwas verarbeiten muss, was maskiert werden muss, dann weiß ich auch noch genug um schnell zu finden, wo die Änderung ansetzen muss und von da ergibt sich auch rasch, welche Stellen in Folge kontrolliert werden müssen.
Ich weiß aber nicht wie lang Deine Scripte sind, dass das eine Schwierigkeit für Dich darstellt. Das vorgestellte Beispiel ist kurz und gibt Anlass für Sorge und Ängste nicht her.
Selbst wenn man es nie wieder ändert, hat man mehr Arbeit darüber nachzudenken was nicht gequoted werden muss, statt es einfach grundsätzlich zu machen.
Und wenn der Text selbst Quotes enthält?
Dann escaped man die entsprechend‽
Und muss die spätere Verwendung im Script nicht überprüfen?
hat man im besten Fall Skripte die scheinbar funktionieren, bis man dann halt mal auf einen Fall trifft wo's schief läuft. Im schlechteren Fall fällt das dann wegen irgendwelcher Sonderzeichen, zum Beispiel Leerzeichen in Dateinamen auf die Nase. Und wenn's ganz blöd kommt, hat man sich eine Sicherheitslücke eingebaut.
Hätte, hätte, Fahrradkette.
Die Fehler, von denen Du sprichst, müsste man erst einbauen um sie zu haben. Man kann auch auf eine Reise in die Sahara einen Regenschirm mitnehmen, denn wenn man sich verfährt, und in London rauskommt, muss man sich dann dort keinen kaufen.
Nette Sprüche, nur ist es wesentlich wahrscheinlicher das ein Skript auf die Nase fällt weil jemand nicht konsequent gequoted hat, als das man sich auf dem Weg in die Sahara nach London verfährt.
Nein.
So wie das Skript ist funktioniert es.
Vermutungen, welche Änderungen es durchlaufen wird, und welche, entbehren jeder Grundlage. Was da wahrscheinlich ist oder nicht kannst Du nicht wissen.
Zumal man den Schirm in der Sahara auch gut gegen die Sonne verwenden kann. Ich habe mich noch nie auf dem Weg in die Sahara nach London verfahren, und habe das auch noch von keinem gehört. Das Skripte nicht mit Leerzeichen in Dateinamen klargekommen sind und das durch ein paar Quotes einfach heilbar war, habe ich allerdings schon öfter gehört, und auch selbst erlebt.
Hat nur mit dem vorliegenden Script nichts zu tun.
Keine Sorge, ich werde nicht wieder den Terminus Cargo-Cult-Programmierung in die Debatte einbringen.
Ich habe nämlich einen neuen: Strohmannprogrammierung.
Ich setze „Defensive Programmierung“ dagegen.
Man benutzt ein Mittel mit dem man ein Problem lösen könnte, das man gar nicht hat. Stellvertretend für die Leute, die das Problem haben und es nicht lösen.
Doch ich löse damit ein Problem das ich habe: Ich möchte weder jetzt noch später darüber nachdenken müssen ob wirklich gequoted werden muss, weil der Nutzen es einfach zu tun für mich deutlich höher ist als die Kosten. Quoten ist billig, sowohl beim schreiben als auch beim ausführen. Fehler aufgrund fehlenden Quotens suchen und bei jeder Änderung immer wieder schauen was davon betroffen ist und dann neu gequoted werden muss, oder was dann nicht mehr gequoted werden muss, kostet wesentlich mehr Zeit.
Du bist aber nicht das Zielpublikum.
Das Zielpublikum ist jemand, der offenbar erst mal Schwierigkeiten mit dem Maskieren überhaupt hat. Da ist der Rat, immer so viel wie möglich zu quoten, eine unterkomplexe Faustregel, die ganz ungünstig zu Lernverweigerung ermuntert.