it-swarm.com.de

Wie ändere ich PATH in einem Shell-Skript?

Ich habe mehrere Projekte, bei denen ich Versionen von Java/Grails/Maven ändern muss. Ich versuche, dies mit einigen Skripten zu handhaben, die die Änderungen vornehmen würden. Zum Beispiel:

#!/bin/sh

export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$Java_HOME/bin:$PATH
export GRAILS_HOME=/cygdrive/c/dev/grails-1.0.3
export PATH=$GRAILS_HOME/bin:$PATH
export MAVEN_HOME=/cygdrive/c/dev/Apache-maven-2.0.11
export PATH=$MAVEN_HOME/bin:$PATH
which Java
which grails
which mvn

Wenn dies ausgeführt wird, wird der PATH im Kontext des Skripts erfolgreich geändert, aber dann endet das Skript und es wurde keine Änderung vorgenommen.

Wie kann ich ein Skript ausführen, um den Pfad für die Shell zu ändern, in der ich gerade arbeite?

Ich benutze Cygwin.

31
Eric Wilson

Sie müssen source oder eval verwenden oder eine neue Shell erzeugen.

Wenn Sie ein Shell-Skript ausführen, wird eine neue untergeordnete Shell erzeugt. Diese untergeordnete Shell führt die Skriptbefehle aus. Die Vater Shell-Umgebung bleibt unberührt von allem, was in der untergeordneten Shell passiert .

Es gibt viele verschiedene Techniken, um diese Situation zu bewältigen:

  1. Bereiten Sie eine Datei vor Quelldatei mit einer Liste von Befehlen für source in der aktuellen Shell:

    export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$Java_HOME/bin:$PATH
    

    und dann beschaffen

    source sourcefile
    

    beachten Sie, dass zu Beginn des Quelldatei kein Sha-Bang erforderlich ist, aber es wird damit funktionieren.

  2. Bereiten Sie ein Skript evalfile.sh vor, das den Befehl zum Festlegen der Umgebung druckt:

    #!/bin/sh
    echo "export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22"
    echo "export PATH=$Java_HOME/bin:$PATH"
    

    und dann evaluate es:

    eval `evalfile.sh`
    
  3. Konfigurieren Sie eine neue Shell und führen Sie sie aus:

    #!/bin/sh
    export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
    export PATH=$Java_HOME/bin:$PATH
    
    exec /bin/bash
    

    beachten Sie, dass Sie, wenn Sie exit in diese Shell eingeben, zum Vater zurückkehren.

  4. Fügen Sie einen Alias ​​in Ihr ~/.bashrc:

    alias prepare_environ='export Java_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$Java_HOME/bin:$PATH;'
    

    und nennen Sie es bei Bedarf:

    prepare_environ
    
42
andcoz

Sie können dies tun, indem Sie das eingebaute source verwenden:

. script_name

Einige Shells enthalten einen Alias ​​mit dem Namen Quelle:

source script_name
19