Ich möchte eine Einstellungsdatei für eine Variable aufrufen. Wie kann ich dies in Bash tun?
Die Einstellungsdatei definiert also die Variablen (z. B. CONFIG.FILE):
production="liveschool_joe"
playschool="playschool_joe"
Und das Skript verwendet diese Variablen darin
#!/bin/bash
production="/REFERENCE/TO/CONFIG.FILE"
playschool="/REFERENCE/TO/CONFIG.FILE"
sudo -u wwwrun svn up /srv/www/htdocs/$production
sudo -u wwwrun svn up /srv/www/htdocs/$playschool
Wie kann ich Bash dazu bringen, so etwas zu tun? Muss ich awk / sed etc ... verwenden?
quelle
source
den Inhalt weiterzuleiten, anstatt eine Datei bereitzustellen? Wiesome command | source
funktioniert nicht ...declare -p
), würde wie folgt aussehensomeArray[3]="abc"
...noch kürzer mit dem Punkt:
quelle
source
Befehl verwenden, um dies zu verdeutlichen?Verwenden Sie den
source
Befehl, um andere Skripte zu importieren:quelle
Ich habe das gleiche Problem speziell im Sicherheitsbereich und habe hier die Lösung gefunden .
Mein Problem war, dass ich ein Bereitstellungsskript in bash mit einer Konfigurationsdatei schreiben wollte, die einen Pfad wie diesen enthält.
Eine vorhandene Lösung besteht darin, den Befehl "SOURCE" zu verwenden und die Konfigurationsdatei mit dieser Variablen zu importieren. 'SOURCE path / to / file' Diese Lösung weist jedoch einige Sicherheitsprobleme auf, da die Quelldatei alles enthalten kann, was ein Bash-Skript kann. Das schafft Sicherheitsprobleme. Eine Malicicios-Person kann beliebigen Code "ausführen", wenn Ihr Skript seine Konfigurationsdatei bezieht.
Stellen Sie sich so etwas vor:
Um dies zu lösen, möchten wir möglicherweise nur Konstrukte im Formular
NAME=VALUE
in dieser Datei (Syntax der Variablenzuweisung) und möglicherweise Kommentare zulassen (obwohl Kommentare technisch gesehen unwichtig sind). Wir können also die Konfigurationsdatei mit demegrep
Befehl äquivalent von überprüfengrep -E
.So habe ich das Problem gelöst.
quelle
CMD="$(rm -fr ~/*)"
.(
und `` `das FinaleCONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(`]*$)"
foo=bar unleash_virus
ausgeführt werden kann. Beachten Siefoo=bar\ unleash_virus
,foo="bar unleash_virus"
undfoo=bar #unleash_virus
sicher sind. Es ist nicht einfach, richtig zu bereinigen und keine harmlose Syntax zu blockieren, besonders wenn man an jedes mögliche Zitieren und Entkommen denkt.in Bash, um die Ausgabe eines Befehls anstelle einer Datei zu beziehen:
Referenz
quelle
Konvertieren der Parameterdatei in Umgebungsvariablen
Normalerweise analysiere ich statt Sourcing, um die Komplexität bestimmter Artefakte in meiner Datei zu vermeiden. Es bietet mir auch Möglichkeiten, Angebote und andere Dinge speziell zu behandeln. Mein Hauptziel ist es, alles, was nach dem '=' steht, als Literal beizubehalten, auch die doppelten Anführungszeichen und Leerzeichen.
Beachten Sie den kleinen Trick, den ich machen musste, um meinen zitierten Text als einen einzelnen Parameter mit Platz für meine
cntpars
Funktion zu betrachten. Es war eine zusätzliche Bewertungsebene erforderlich. Wenn ich dies nicht wie in Option 2 tun würde, hätte ich 2 Parameter wie folgt übergeben:"value
content"
Durch doppelte Anführungszeichen während der Befehlsausführung werden die doppelten Anführungszeichen aus der Parameterdatei beibehalten. Daher schlägt auch die 3. Option fehl.
Die andere Option wäre natürlich, einfach keine Variablen in doppelten Anführungszeichen wie in Option 4 anzugeben und dann nur sicherzustellen, dass Sie sie bei Bedarf in Anführungszeichen setzen.
Nur etwas zu beachten.
Echtzeitsuche
Eine andere Sache, die ich gerne mache, ist eine Echtzeitsuche, bei der die Verwendung von Umgebungsvariablen vermieden wird:
Nicht die effizienteste, aber mit kleineren Dateien funktioniert sehr sauber.
quelle
Wenn die Variablen generiert und nicht in einer Datei gespeichert werden, können Sie sie nicht weiterleiten
source
. Der täuschend einfache Weg, dies zu tun, ist folgender:quelle
Das Skript mit Variablen kann mit bash importiert ausgeführt werden. Betrachten Sie die script-variable.sh
Betrachten Sie das eigentliche Skript, in dem die Variable verwendet wird:
quelle
src-var
ist keine gültige Kennung.Importieren Sie nur die Variablen, die Sie benötigen, um Namenskonflikte zu vermeiden:
quelle