Ich habe ein Korn-Shell-Skript
#!/bin/ksh
# set the right ENV
case $INPUT in
abc)
export BIN=${ABC_BIN}
;;
def)
export BIN=${DEF_BIN}
;;
*)
export BIN=${BASE_BIN}
;;
esac
# exit 0 <- bad idea for sourcing the file
Jetzt werden diese VARs nur in eine Subshell exportiert, aber ich möchte, dass sie auch in meiner übergeordneten Shell festgelegt werden. Wenn ich also an der Eingabeaufforderung bin, sind diese Variablen immer noch korrekt festgelegt.
ich weiss Bescheid
. .myscript.sh
Aber gibt es eine Möglichkeit, dies ohne "Sourcing" zu tun? da meine Benutzer oft vergessen, "Quelle".
EDIT1: Entfernen des Teils "exit 0" - ich habe nur getippt, ohne vorher darüber nachzudenken
EDIT2: Um mehr Details darüber hinzuzufügen, warum ich das brauche: Meine Entwickler schreiben Code für (der Einfachheit halber) 2 Apps: ABC & DEF. Jede App wird in der Produktion von den separaten Benutzern usrabc und usrdef ausgeführt. Daher haben sie ihre $ BIN, $ CFG, $ ORA_HOME eingerichtet, was auch immer - spezifisch für ihre Apps.
damit
- $ BIN = / opt / abc / bin # $ ABC_BIN von ABC im obigen Skript
- DEFs $ BIN = / opt / def / bin # $ DEF_BIN
usw.
Jetzt können Entwickler auf der Dev-Box sowohl ABC als auch DEF gleichzeitig unter ihrem eigenen Benutzerkonto 'justin_case' entwickeln, und ich lasse sie die Datei (oben) als Quelle verwenden, damit sie ihre ENV-Var-Einstellungen hin und her ändern können. ($ BIN sollte gleichzeitig auf $ ABC_BIN zeigen und dann muss ich zu $ BIN = $ DEF_BIN wechseln)
Jetzt sollte das Skript auch neue Sandboxen für die parallele Entwicklung derselben App usw. erstellen. Dadurch kann ich dies interaktiv tun und nach dem Namen der Sandbox usw. fragen.
- / home / justin_case / sandbox_abc_beta2
- / home / justin_case / sandbox_abc_r1
- / home / justin_case / sandbox_def_r1
Die andere Option, die ich in Betracht gezogen habe, besteht darin, Aliase zu schreiben und sie dem Profil jedes Benutzers hinzuzufügen
- alias 'setup_env =. .myscript.sh '
und führen Sie es mit
- setup_env parameter1 ... parameterX
das macht für mich jetzt mehr Sinn