Wie mehrere Variablen dauerhaft speichern und abrufbar machen (Bash)?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

man könnte die Variablen in einem Rutsch in eine conf-Datei in Form von Variablen-Zuweisungen schreiben und diese conf-Datei dann „sourcen“...

z. B. conf-Datei ~/.blubber.conf
a=1
b=2
c=3

#!/bin/sh
source ~/.blubber.conf
echo $a $b $c

Danke soweit. Kann man die Variablen in der Conf-Datei dann auch per Befehl ändern und wenn ja, wie?

0
@EmptyVoid

1. entweder anhängen...
echo 'a=11' >> ~/.blubber.conf
(die conf-Datei wird dann aber irgendwann sehr lang und man kann sie nich einfach kürzen...)

2. oder immer im Ganzen neu-schreiben...

0
@EmptyVoid

ich hab noch ne Idee:
mit sed geht es auch, aber das sieht dann komisch aus:
sed -i 's:^\(varname\)=.*$:\1=neuerWert' ~/.blubber.conf
LOL

0

Hallo

Wie mehrere Variablen dauerhaft speichern und abrufbar machen (Bash)?

Das ist doch ganz einfach, Du bestimmst die Variablen in der ~/.bashrc  dann sind sie beim Systemstart da. Einfach die Variablen unten einfügen:

var1=inhalt1
var2=inhalt2
var3=inhalt3
var4=inhalt4

und schon bringt ein:

echo $var1
inhalt1

hervor, auch nach einem Neustart.

Das wäre aber sehr umständlich, da ich, weil ich nicht weiß, wie man bestimme Zeilen einer Textdatei ausliest,

head, tail oder auch grep helfen dabei bestimmte Zeilen zu finden und hervorzuheben.

cat dateiname | head -n10 | tail -n1

würde zum Beispiel nur die 10. Zeile ausgeben. Oder:

grep STRING dateiname

Gibt nur die Zeile(n) aus in der STRING vorkommt.

Bestimmte Variablen, die wichtig für das Programm sind, werden vom Nutzer definiert.

Wenn Du konkreter schreiben würdest was Du hast udn was Du erreichen willst wäre es einfacher Dir zu helfen.

Linuxhase

Das hier wäre evtl. ne Idee:

#!/bin/bash
#Name der Konfigurationsdatei
config_file="foo.conf"

#Eine Variable in die Konfigurationsdatei speichern
#Anwendung: save_var <name>
function save_var(){
name="$1"
[ -z "$name" ] && return 1
[ -f "${config_file}" ] || touch "${config_file}"
value="$(grep "^${name}=" "${config_file}")"
if [ -z "${value}" ];then
echo "${name}='${!name}'" >> "${config_file}"
else
sed -iE "/^${name}=.*\$/d" "${config_file}"
echo "${name}=${!name}" >> "${config_file}"
fi
return 0
}

#Eine Variable aus der Konfigurationsdatei laden
#Anwendung: load_var <name>
function load_var(){
name="$1"
[ -z "$name" ] && return 1
[ -f "${config_file}" ] || touch "${config_file}"
export ${name}="$(grep -E "^${name}=" "${config_file}" | sed -E 's|.+=||')"
return 0
}

#Anwendungsbeispiel:
#Setze den Wert von "foo" auf "bar"
foo="bar"
#Speichere "foo" in der Konfigurationsdatei
save_var foo
#Setze "foo" auf "baz"
foo="baz"
#Lade "foo" aus der Konfigurationsdatei
load_var foo
#Gibt "bar" aus
echo ${foo}

P.S.: Falls du eine genauere Erklärung benötigst, wie genau die beiden Funktionen im einzelnen arbeiten, sagtst B'scheid... Das wär n etwas längerer Text...

Was möchtest Du wissen?