Shell

如何在 shell 腳本中更改 PATH?

  • November 21, 2018

我有幾個項目需要我更改 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。

你必須使用sourceoreval來生成一個新的 shell。

當您執行 shell 腳本時,會生成一個新的shell。這個shell 將執行腳本命令。shell 環境將不受shell中發生的任何事情的影響。

有很多不同的技術可以處理這種情況:

  1. 在目前 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`
  1. 配置並執行一個新的 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

引用自:https://unix.stackexchange.com/questions/23426