Ausführen eines Shell-Skripts ohne Umgebungsvariablen

17

Wie ich weiß, erbt das neu ausgeführte Shell-Skript seine Umgebungsvariablen. Gibt es eine Möglichkeit, dies zu blockieren? (Shell ohne Variablenvererbung ausführen)

Eonil
quelle

Antworten:

21

Sie können Ihrem Skript anscheinend ein Präfix voranstellen, mit env -idem die Umgebung vor dem Ausführen des Skripts gelöscht wird:

env -i sh test.sh

Von man env:

-i, --ignore-environment
              start with an empty environment

Ich bin mir nicht sicher, warum du das tun möchtest ...

vmfarms
quelle
Vielen Dank. Das hat funktioniert! Ich benötige dies, um ein Build-Skript in IDE aufzurufen, ohne die Umgebungsvariablen der IDE-Konfiguration zu beeinflussen. Aber noch weit weg zum Ziel. Dies kann Ihre Neugier helfen!
Eonil
Um einen weiteren Anwendungsfall hinzuzufügen: Ich bewerte derzeit Fisch und zsh als Alternative zu bash. Aber ich bin noch nicht ganz bereit, die Candidate-Shell als Login-Shell zu befördern (wie in chsh .... Wenn ich nur ein Terminalfenster öffne und ausführe zshoder fish(mit oder ohne -lBelang), verschmutzt sie meine Umgebung mit allen Arten von Variablen aus der Shell begann ich es zu tun , den Trick mit. env -clöst dieses Problem für mich , ich tue. env -i TERM=xterm-256color $(which fish).
Paidhi
Dies ist nützlich, wenn Sie eine Cron-Task haben, die fehlschlägt, weil die Umgebung nicht richtig konfiguriert ist und Sie sie testen müssen. Dies ist auch eine gute Möglichkeit, um zu testen, ob Ihre Skripte Annahmen über die Umgebungseinstellungen treffen. Vielen Dank!
Razzed
Ein anderer möglicher Ort, an dem dies nützlich sein könnte, ist das Testen einiger periodischer Jobs (z. B. Cron-Jobs), um sicherzustellen, dass keine Abhängigkeiten der Umgebung vom Skript bestehen. Dasselbe gilt für Befehle, die in einer "Exec" -Ressource in einem Puppenmanifest ausgeführt würden.
TommyTheKid
1

Eine Möglichkeit (obwohl es ziemlich hässlich aussieht):

exec -c $SCRIPTstartet $ SCRIPT mit einer leeren Umgebung. (siehe man bashSuche nach exec \[-cl\]).

weh
quelle
1
Dies funktionierte fast genauso mit env -i, ich habe mich jedoch für env -i entschieden, da exec den Rest des Skripts nicht mehr ausführt.
Eonil,
-1

Soweit ich weiß, lautet die Antwort "Nein". Sie können Umgebungsvariablen innerhalb des Skripts selbst überschreiben. Der Wert der Umgebungsvariablen sollte auf den ursprünglichen Wert zurückgesetzt werden, sobald das Skript ausgeführt wurde. Sie müssen das Skript wahrscheinlich als untergeordneten Prozess ausführen: $ this.script.sh & um zu vermeiden, dass Sie sich jedes Mal von Ihrer Shell abmelden müssen, wenn Sie das Skript ausführen, um die Umgebungsvariablen auf ihren ursprünglichen Wert zurückzusetzen.

Bearbeiten:

Aus einem früheren Poster geht hervor, dass ich mich irre, dass dies nicht möglich ist.

user53079
quelle