シェルスクリプトでPATHを変更するには?

シェルスクリプトでPATHを変更するには?

Java / Grails / Mavenのバージョンを変更する必要があるいくつかのプロジェクトがあります。変更できるスクリプトを使用してこの問題を処理しようとしています。たとえば、

#!/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

実行すると、スクリプトのコンテキストで PATH が正常に変更されますが、変更が完了していないままスクリプトは終了します。

現在使用しているシェルのPATHを変更するスクリプトをどのように実行しますか?

私はシグウィンを使用しています。

答え1

新しいシェルを作成するには、sourceまたはを使用する必要があります。eval

新しいシェルスクリプトを実行するとき子供シェルが作成されました。これ子供シェルはスクリプトコマンドを実行します。これシェル環境は何が起こっても影響を受けません。子供シェル。

この状況を処理できるさまざまな技術があります。

  1. ファイルを準備するソースファイルsource現在のシェルのコマンドのリストを含みます。

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

    その後、ソースを入手してください。

    source sourcefile
    

    最初はシャバンは必要ありません。ソースファイルしかし、それで動作します。

  2. スクリプトの準備評価ファイル.sh環境を設定するコマンドを印刷します。

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

    それからeval評価してみてください。

    eval `evalfile.sh`
    
  3. 新しいシェルを設定して実行します。

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

    このシェルに入力すると、exit次に戻ります。一つ。

  4. 次にエイリアスを追加してください~/.bashrc

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

    必要に応じて電話してください。

    prepare_environ
    

答え2

以下を使用してこれを実行できます。源泉内蔵:

. script_name

一部のシェルは次のエイリアスを提供します。源泉:

source script_name

関連情報