Shell
如何在 shell 腳本中更改 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,但是腳本結束了,並且沒有完成任何更改。
如何執行腳本以更改我目前工作的 shell 的 PATH?
我正在使用 Cygwin。
你必須使用
source
oreval
來生成一個新的 shell。當您執行 shell 腳本時,會生成一個新的子shell。這個子shell 將執行腳本命令。父shell 環境將不受子shell中發生的任何事情的影響。
有很多不同的技術可以處理這種情況:
- 在目前 shell 中準備一個包含命令列表的文件sourcefile :
source
export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22 export PATH=$JAVA_HOME/bin:$PATH
然後獲取它
source sourcefile
請注意,在sourcefile的開頭不需要 sha-bang ,但它可以使用它。 2. 準備一個腳本evalfile.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`
- 配置並執行一個新的 shell:
#!/bin/sh export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22 export PATH=$JAVA_HOME/bin:$PATH exec /bin/bash
請注意,當您鍵入
exit
此 shell 時,您將返回到父shell 。 4. 把別名放在你的~/.bashrc
:alias prepare_environ='export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$JAVA_HOME/bin:$PATH;'
並在需要時呼叫它:
prepare_environ