Wie kann verhindert werden, dass exportierte Umgebungsvariablen von einer untergeordneten Shell (Bash) erkannt/zugänglich werden?

Wie kann verhindert werden, dass exportierte Umgebungsvariablen von einer untergeordneten Shell (Bash) erkannt/zugänglich werden?

Daher muss ich verhindern, dass viele exportierte Variablen von einer untergeordneten Shell erkannt werden.

Das Problem besteht darin, dass eine Anwendung (Wine+UDK) keine Projekte mit zu vielen (>65535) Bytes in der Umgebung erstellt, und meine hat eine Menge (95323), nachdem ich ein Projekt (ScriptEchoColor) verwende, das Umgebungsvariablen zwischen allen Bash-Shells teilt.

Ich kann keinen Befehl finden, mit dem ich eine untergeordnete Shell erstellen kann, die die aktuellen Umgebungsvariablen nicht akzeptiert und stattdessen nur die Variablen verwendet, die in meinem Benutzerprofil und im gesamten System festgelegt sind.

Ich habe viele der unter gezeigten Optionen ausprobiert bash --help.

Antwort1

Mit dem Befehl können Sie enveinen Prozess mit einer sauberen Umgebung starten. Hier ist ein Beispiel:

env -i /bin/myprog

Wenn Sie dennoch einige Variablen exportieren müssen, können Sie dies im Aufruf tun:

env -i MYVAR=foo /bin/myprog

Der Befehl env wird benötigt fürPOSIX.

Antwort2

env -i somecommandwird in einer leeren Umgebung ausgeführt somecommand. Sie können Argumente nach angeben somecommand. Wenn PATHgelöscht wird, müssen Sie den vollständigen Pfad zu angeben somecommand. Alternativ können Sie PATHeinen anderen Wert beibehalten oder festlegen.

env -i PATH="$PATH:/another/directory" somecommand

Wenn Sie dieselbe Umgebung haben möchten, die Sie nach der Anmeldung hätten, behalten Sie nur einige Variablen bei und laden Sie Ihre , .profileum den Rest festzulegen. Wenn Sie eine andere Anmelde-Shell verwenden (bash mit .bash_profile, csh mit .loginusw.), passen Sie sie entsprechend an.

env -i HOME="$HOME" PATH=/usr/local/bin:/usr/bin:/bin USER="$USER" \
    sh -c '. ~/.profile; "$@"' _ somecommand

Alternativ möchten Sie vielleicht auch einige Variablen aus der Umgebung entfernen. env -u VAR1 -u VAR2 somecommandentfernt VAR1und VAR2aus der Umgebung und führt aus somecommand. Unter Linux können Sie verwenden, env -0 | tr '\n\0' '.\n' | sed 's/=.*//'um eine Liste der Umgebungsvariablen mit einem Namen pro Zeile zu erstellen, die zum Filtern geeignet ist. Auf anderen Unix-Varianten env | sed 's/=.*//'erledigt es dieselbe Aufgabe, mit der Einschränkung, dass es möglicherweise falsche Ergebnisse findet, wenn die Werte einiger Variablen Zeilenumbrüche enthalten.

Antwort3

Problem typeset +x variable_name...oder declare +x variable_name...Befehl. Sie können sogar reguläre Ausdrücke für Variablennamen verwenden, wie typeset +x ${!MY_VAR_*}.

verwandte Informationen