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?
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.
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.
Verwenden Sie set
anstelle von env
:
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%Tags und Links bash