{"id":1836,"date":"2021-05-28T13:38:05","date_gmt":"2021-05-28T11:38:05","guid":{"rendered":"https:\/\/my.stargazer.at\/?p=1836"},"modified":"2021-05-28T14:15:03","modified_gmt":"2021-05-28T12:15:03","slug":"bash-files-vs-configuration","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2021\/05\/28\/bash-files-vs-configuration\/","title":{"rendered":"Bash und Konfigurationen"},"content":{"rendered":"<p>Ich glaube, es ist kein gro\u00dfes Geheimnis mehr, dass ich gerne Dinge scripte um mein Leben einfacher zu gestalten: Das startet beim Smarthome und zieht sich hin zur Serverwartung und alles was halt sonst so scriptbar ist. Doch diesmal habe ich ein Thema auf dem Herzen, das ich mit euch teilen m\u00f6chte: Wie arbeitet man mit Konfigurationsdateien in Bash?<\/p>\n<p>Erstmal vorweg: Konfigurationen in Scripts sind Benutzernamen, Server, entfernte Repositories, you name it. Alles was man halt so an Daten in so einem Script braucht. Gerade wenn man seine Scripts \u00f6ffentlich macht, sollte man darauf achten, nichts zu leaken &#8211; denn Leute werden mit dem Zeug rumexperimentieren.<\/p>\n<p>Also was ist die L\u00f6sung? F\u00fcr mich war es vorweg einmal alle Benutzernamen und anderen Krempel in Variablen zu packen um sie leichter anpassen zu k\u00f6nnen und eventuelle Fehler von der vorherigen Problematik zu l\u00f6sen. Ist jetzt nichts Gro\u00dfes, aber eine Voraussetzung f\u00fcr eine saubere L\u00f6sung.<\/p>\n<p>Der n\u00e4chste logische Schritt w\u00e4re ein externes Config-File. In Bash k\u00f6nnte so eine L\u00f6sung wie folgt aussehen:<\/p>\n<pre>source \/home\/myuser\/test\/config<\/pre>\n<p>Und das ist genau das, wo ich mir angefangen habe, Gedanken zu machen. Ein Script zu sourcen hei\u00dft es auszuf\u00fchren. Mit anderen Worten, source ist eine M\u00f6glichkeit mit der Config &#8211; sofern jemand b\u00f6sen Code reinbastelt richtig in Schwierigkeiten zu kommen &#8211; was sich jedoch durch einfache Tricks vermeiden l\u00e4sst.<\/p>\n<p>Meine L\u00f6sung sieht vor, die Config zu parsen anstatt sie auszuf\u00fchren. Da Json sehr einfach und lesbar ist, habe ich mir gedacht, kann ich es auch gleich verwenden. Durch den Shell-Parser &#8218;jq&#8216; lassen sich Werte auslesen ohne die Datei auszuf\u00fchren. Wenn ihr mehr auf XML steht, empfehle ich das XML Startlet.<\/p>\n<p>Aber genug der Theorie. Gehen wir die Sache an einem Beispiel an. Eine einfache Config k\u00f6nnte wie folgt aussehen:<\/p>\n<pre>{ \r\n\"username\": \"username-or-email\",\r\n\"password\": \"the-password\" \r\n}<\/pre>\n<p>In unserem Hauptscript k\u00f6nnen wir nun Daten mit jq auslesen:<\/p>\n<pre>USERNAME=\"$( jq -r '.username' \"$config_file\" )\"<\/pre>\n<p>Und die Moral von der Geschicht&#8216;: Parse deine Config, Exekutiere sie nicht!<\/p>","protected":false},"excerpt":{"rendered":"<p>Ich glaube, es ist kein gro\u00dfes Geheimnis mehr, dass ich gerne Dinge scripte um mein Leben einfacher zu gestalten: Das startet beim Smarthome und zieht sich hin zur Serverwartung und alles was halt sonst so scriptbar ist. Doch diesmal habe ich ein Thema auf dem Herzen, das ich mit euch teilen m\u00f6chte: Wie arbeitet man mit Konfigurationsdateien in [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1837,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[389,22,499],"class_list":["post-1836","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-related-stuff","tag-bash","tag-linux","tag-script"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=1836"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1836\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media\/1837"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=1836"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=1836"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=1836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}