Wie gebe ich env als ausführbares Shell-Skript aus?

8

Sie können Ihre Umgebung einfach als ausführbares Shell-Skript mit

ausgeben %Vor%

... später in einem anderen Skript ...

%Vor%

Dies funktioniert in den einfachsten Fällen, scheitert jedoch, wenn spezielle Zeichen oder Leerzeichen in env vorhanden sind.

Wie kann ich das obige Skript reparieren, so dass es mit Sachen wie a='"'"'" funktioniert?

    
Sam Saffron 26.11.2014, 00:45
quelle

3 Antworten

4

Im Folgenden wird bash printf %q verwendet, um Werte unabhängig vom Inhalt korrekt zu entfernen. Es ist garantiert, buchstäblich jeden möglichen Wert zu handhaben - Anführungsstriche, Zeilenumbrüche usw. - solange die Shell, die ihre Ausgabe ausgibt, Bash ist und solange das verwendete Betriebssystem die% code_% -Funktion unterstützt, die zuerst von Linux zur Verfügung gestellt wurde Inhalt der Umgebung als NUL-begrenzter Stream. Es verwendet spezielle Anführungsformen wie /proc/self/environ as und gegebenenfalls, damit seine Ausgabe von reinen POSIX-Interpretern nicht berücksichtigt wird.

%Vor%

Beachten Sie, dass Sie die Ausgabe als Quelle verwenden und nicht als externe ausführbare Datei ausführen möchten, wenn sich die aktuelle Shell-Umgebung ändern soll. Wenn Sie $'\n' vor dem Sourcing nicht verwenden möchten, fügen Sie der Formatzeichenfolge eine führende set -a hinzu.

    
Charles Duffy 26.11.2014 00:58
quelle
4

Verwenden Sie set anstelle von env :

%Vor%

Dank dieser ähnlichen Frage können wir Folgendes tun, um JUST-Umgebungsvariablen wie folgt zu erhalten:

%Vor%

Probieren Sie dieses Ungetüm, das nur den Unterschied zu einer "unberührten" Schale ausdrücken sollte. YMMV:

%Vor%     
MikeyB 26.11.2014 00:54
quelle
3

Einfachste Lösung scheint

zu sein %Vor%     
Sam Saffron 26.11.2014 03:49
quelle

Tags und Links