569 Stimmen

Kann ein Shell-Skript Umgebungsvariablen der aufrufenden Shell setzen?

Ich versuche, ein Shell-Skript zu schreiben, das, wenn es ausgeführt wird, einige Umgebungsvariablen setzt, die in der Shell des Aufrufers gesetzt bleiben.

setenv FOO foo

in csh/tcsh, oder

export FOO=foo

in sh/bash nur während der Ausführung des Skripts setzen.

Ich weiß bereits, dass

source myscript

führt die Befehle des Skripts aus, anstatt eine neue Shell zu starten, und das kann dazu führen, dass die Umgebung des "Aufrufers" festgelegt wird.

Aber hier ist der Haken:

Ich möchte, dass dieses Skript entweder von bash oder csh aus aufgerufen werden kann. Mit anderen Worten, ich möchte, dass Benutzer einer der beiden Shells mein Skript ausführen können und dass sich die Umgebung ihrer Shells ändert. Source" wird also nicht funktionieren, da ein Benutzer, der csh ausführt, kein Bash-Skript aufrufen kann und ein Benutzer, der bash ausführt, kein csh-Skript aufrufen kann.

Gibt es eine vernünftige Lösung, bei der man nicht ZWEI Versionen des Skripts schreiben und pflegen muss?

-12voto

phresus Punkte 1986

Abgesehen von den Schreibkonditionen, die davon abhängen, auf was $SHELL/$TERM gesetzt ist, nein. Was ist falsch daran, Perl zu benutzen? Es ist ziemlich allgegenwärtig (mir fällt keine einzige UNIX-Variante ein, die es nicht hat), und es erspart Ihnen die Mühe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X