
Ich habe einen Ordner mit dem Namen MyProperties
und er enthält mehrere .properties
Dateien wie 1.properties
, 2.properties
, 3.properties
usw. Jede Datei enthält etwas wie:
keyname=value
Was muss ich hier als Wert in die Properties-Datei schreiben, damit dieser zugewiesen bzw. ersetzt wird? Wie iteriere ich in einem Bash-Skript darüber und weise den Wert dem Schlüssel zu?
Pseudocode:
#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname
Antwort1
Sie können sed
zum Ersetzen von Werten in Dateien Folgendes verwenden:
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
Antwort2
Wenn Sie wirklich mehrere Dateien mit varName=value
Paaren haben, müssen Sie nurQuelleiterieren Sie also über alle .properties
Dateien und geben Sie die Quelle jeder einzelnen an:
for file in /path/to/MyProperties/*.properties; do
. "$file"
done
Sie haben nun alle Variablen in Ihrem Skript definiert. Zur Veranschaulichung:
$ cat foo.properties
foo="bar"
$ echo "$foo" ## no value
$ . ./foo.properties
$ echo "$foo"
bar
Dies setzt voraus, dass Ihre .properties
Dateiennichts als Variable=Wert-Paare. Beim Sourcing wird jede Zeile der Datei in der Shell ausgeführt, die das Sourcing-Skript ausführt. Daher .properties
werden auch alle Befehle in Ihren Dateien ausgeführt. Und jeder Angreifer mit Zugriff darauf MyProperties
kann dort einen bösartigen Befehl hinzufügen. Tun Sie dies also nur, wenn Sie sich über den Inhalt der Dateien sicher sind.
Beachten Sie, dass es wichtig ist, dass der dem .
integrierten Element angegebene Pfad ein Zeichen enthält /
(daher das ./foo.properties
Obige), da die Datei sonst in den Verzeichnissen von statt im aktuellen Verzeichnis gesucht wird $PATH
(im Fall von bash
und wenn sich kein POSIX-Konformitätsmodus befindet, wird im aktuellen Arbeitsverzeichnis . file
nach gesucht , wenn sie in nicht gefunden wurde ).file
$PATH