Ich muss Umgebungsvariablen in einer Datei speichern und (später) soll ein Prozess sie importieren. Ich brauche dies, um ein Programm zu umgehen, fooprog
das 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 fooprogram
und barscript
sie 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/$$/environ
und 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 -p
gibt 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 -p
Befehlszeile 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 -v
um 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 declare
unter bash
.