Shell-Variablen exportieren (speichern) und importieren (Quelle)

Shell-Variablen exportieren (speichern) und importieren (Quelle)

Ich muss Umgebungsvariablen in einer Datei speichern und (später) soll ein Prozess sie importieren. Ich brauche dies, um ein Programm zu umgehen, fooprogdas die Umgebung vor der Ausführung von aufhebt barscript, und ich brauche einige Umgebungsvariablen in barscript. Ich plane also, alle Umgebungsvariablen vor der Ausführung in einer Datei zu speichern fooprogramund barscriptsie aus einer Datei zu beziehen.

Ich habe dies versucht, aber es funktioniert nicht, wenn Variablen Leerzeichen enthalten.

$ env > my_environment
$ . my_environment

Ich schätze, die richtige Vorgehensweise besteht darin, irgendwie damit herumzuspielen /proc/$$/environund es zu analysieren barscript, aber ich kann nicht herausfinden, wie man das richtig macht.

edit: Anführungszeichen oder Zeilenumbrüche sind auch problematisch. Wie könnte man es so machen, dass so problematische Envars wie die folgenden ohne Probleme als Quelle verwendet werden könnten?

PROBLEMATIC='this has double quotes " and single quotes '\'' and even
newlines.

See?'

Antwort1

$ declare -p > my_environment

Später, drinnen barscript:

. my_environment

declare -pgibt Umgebungsvariablen in einer Form aus, die von der Shell ausgeführt werden kann, einschließlich der erforderlichen Anführungszeichen und Escape-Zeichen für Variablen.

$ foobar='"some double-quoted text"'
$ echo $foobar 
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""

Übrigens, wenn Sie nicht Ihre gesamte Umgebung ausgeben möchten, müssen Sie das nicht tun. Geben Sie einfach die Variablen, die Sie ausgeben möchten, in der declare -pBefehlszeile an:

$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""

oder leiten Sie eine Weiterleitung durch, grep -vum bestimmte Variablen auszuschließen, die Sie nicht in der Ausgabe haben möchten.

So erhalten Sie nur die exportierten Variablen:

declare -p -x > my_environment

Weitere Informationen finden Sie help declareunter bash.

verwandte Informationen