2016-08-24 2 views
3

Das Linux-Befehlszeilenprogramm env kann die aktuelle Umgebung ausgeben.env -0 Dump-Umgebung. Aber wie lädt man es?

Da gibt es einige Sonderzeichen, die ich verwenden möchte env -0 (jede Ausgangszeile mit 0 Byte statt Newline zu beenden).

Aber wie wird dieser Dump erneut geladen?

Bash Version: 4.2.53

+0

produziert, was tun Sie mit 'load' bedeuten? – hek2mgl

+0

@ hek2mgl Mit "load" möchte ich diese Variablen in einer anderen Shell setzen. – guettli

Antwort

8

nicht env Verwenden Sie; Verwenden Sie declare -px, die die Werte exportierter Variablen in einem Formular ausgibt, das erneut ausgeführt werden kann.

$ declare -px > env.sh 
$ source env.sh 

Dies gibt Ihnen auch die Möglichkeit, nicht -exported Variablen als auch des Sparens, die env keinen Zugriff auf: nur declare -p verwenden (die -x Option fallen).


Zum Beispiel, wenn Sie foo=$'hello\nworld' geschrieben, produziert env der Ausgang

foo=hello 
world 

während declare -px die Ausgabe

declare -x foo="hello 
world" 
+0

Ja, funktioniert auch wenn Zeilenumbrüche in Variablen sind. Vielen Dank. – guettli

3

Wenn Sie den Export von env laden möchten, können Sie verwenden, was in Set environment variables from file beschrieben:

env > env_file 
set -o allexport 
source env_file 
set +o allexport 

Aber wenn Sie mit -0 exportieren passieren nutzt (von man env):

-0, --null
Ende jeder Ausgangsleitung mit 0 Byte rath er als Newline

So können Sie Schleife durch die Datei 0 als Zeichenbegrenzer mit dem Ende der Zeile (weitere Beschreibung in What does IFS= do in this bash loop: cat file | while IFS= read -r line; do … done) markieren:

env -0 > env_file 
while IFS= read -r -d $'\0' var 
do 
    export "$var" 
done < env_file 
+0

Die erste Lösung funktioniert nicht in meinem Fall: 'env> env_file'' set -o allexport' 'source env_file 'Ausgabe -bash: PROFILEREAD: readonly Variable bash: 52052: Befehl nicht gefunden ... (viel Befehl nicht gefundene Nachrichten) ' – guettli

+1

Die zweite Lösung (env -0) funktioniert, außer:' PROFILEREAD readonly Variable' – guettli

+0

@guettli uhms, dies liegt daran, dass diese Variable auf readonly gesetzt ist. Es gibt [einige Hacks auf, wie man sie zurücksetzt] (http://stackoverflow.com/a/17398009/1983854) ... – fedorqui

Verwandte Themen