setzeigt auch Funktionen und Systemvariablen wie BASH_VERSION
Glenn Jackman
Ihre Frage ist unklar. Ist das ein Auszug der setAusgabe, die Sie zeigen? Wenn ja, dann ist es nicht bash. Möchten Sie alle aktuell gesetzten Variablen einschließlich der speziellen Shell-Variablen exportieren? Oder nur diese 3 Variablen wie in export a b c?
Stéphane Chazelas
export ${!T*}würde jeden definierten Parameter exportieren, dessen Name mit beginnt T. Leider scheint es keine einfache Möglichkeit zu geben, eine Liste aller definierten Parameter zu erstellen .
Chepner
Antworten:
72
Führen Sie den folgenden Befehl aus, bevor Sie die Variablen festlegen:
set-a
Manpage:
-a
Wenn diese Option aktiviert ist, wird das Exportattribut für jede Variable festgelegt, für die eine Zuweisung durchgeführt wird.
Führen Sie set +aanschließend den Befehl aus, um diese Option zu deaktivieren.
Jetzt müssen wir diese Variablen exportieren, aber xargs kann dies nicht, da es den untergeordneten Prozess aufteilt. Der Export muss unter dem aktuellen Prozess ausgeführt werden. echo "export" ...Erstelle einen Befehl, den wir wollen, und benutze dann ``, um ihn auszuführen. Das ist alles: p.
Willkommen bei U & L SE. Vielleicht können Sie Ihren Beitrag bearbeiten und erläutern.
Archemar
1
Es ist nicht richtig anzunehmen, dass Umgebungsvariablennamen nur aus az und AZ bestehen. Sie enthalten normalerweise auch Unterstriche und Ziffern, also wäre das Muster [a-zA-Z_][a-zA-Z0-9_]*. Abhängig von der verwendeten Shell gibt es einige Variationen, dies ist jedoch der sichere / portable Ansatz.
Chris Johnson
Guter Punkt @ChrisJohnson - aktualisiert!
Wil Moore III
3
Sie können exportdem Variablennamen über awkund evalder resultierenden Ausgabe voranstellen :
set
zeigt auch Funktionen und Systemvariablen wie BASH_VERSIONset
Ausgabe, die Sie zeigen? Wenn ja, dann ist es nichtbash
. Möchten Sie alle aktuell gesetzten Variablen einschließlich der speziellen Shell-Variablen exportieren? Oder nur diese 3 Variablen wie inexport a b c
?export ${!T*}
würde jeden definierten Parameter exportieren, dessen Name mit beginntT
. Leider scheint es keine einfache Möglichkeit zu geben, eine Liste aller definierten Parameter zu erstellen .Antworten:
Führen Sie den folgenden Befehl aus, bevor Sie die Variablen festlegen:
Manpage:
Führen Sie
set +a
anschließend den Befehl aus, um diese Option zu deaktivieren.Beispiel:
Wo
environment
enthält:quelle
function example(){ echo good; }; export -f example
Rufen Sie zunächst alle festgelegten Umgebungsvariablen ab:
(set -o posix ; set)
Referenz: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- Linux-BaAbrufen aller Umgebungsvariablennamen, durch Leerzeichen getrennt:
awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}'
Referenz: awk-Spaltenwert ohne neue Zeile drucken und Komma und https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- hinzufügen awk-befehlJetzt müssen wir diese Variablen exportieren, aber xargs kann dies nicht, da es den untergeordneten Prozess aufteilt. Der Export muss unter dem aktuellen Prozess ausgeführt werden.
echo "export" ...
Erstelle einen Befehl, den wir wollen, und benutze dann ``, um ihn auszuführen. Das ist alles: p.quelle
[a-zA-Z_][a-zA-Z0-9_]*
. Abhängig von der verwendeten Shell gibt es einige Variationen, dies ist jedoch der sichere / portable Ansatz.Sie können
export
dem Variablennamen überawk
undeval
der resultierenden Ausgabe voranstellen :quelle
printenv
druckt die bereits exportierten Variablen. Das funktioniert auch nicht richtig, wenn es Variablen gibt, die Zeilenumbrüche enthalten.Dies funktioniert, wenn Ihre Shell bash ist (möglicherweise auch andere Shells)
Ihre neue Datei enthält einen Speicherauszug aller derzeit definierten Variablen ... mit Einträgen wie
dann, um die aktuelle Shell mit all diesen env vars-Problemen aufzubocken
quelle