Eri*_*son 36 shell cygwin path environment-variables
我有几个项目需要我更改 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
Run Code Online (Sandbox Code Playgroud)
执行此操作时,它成功地更改了脚本上下文中的 PATH,但随后脚本结束,并且没有完成任何更改。
如何以某种方式运行脚本以更改我当前工作的 shell 的 PATH?
我正在使用 Cygwin。
and*_*coz 45
您必须使用source
或eval
或来生成新的外壳。
当您运行 shell 脚本时,会生成一个新的子shell。这个子shell 将执行脚本命令。在父亲的事情在发生的shell环境将保持不变子壳。
有很多不同的技术来管理这种情况:
在当前 shell 中准备一个包含命令列表的文件源文件source
:
export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
然后来源
source sourcefile
Run Code Online (Sandbox Code Playgroud)
请注意,源文件的开头不需要 sha-bang ,但它可以使用它。
准备一个脚本evalfile.sh来打印设置环境的命令:
#!/bin/sh
echo "export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22"
echo "export PATH=$JAVA_HOME/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
然后使用eval
它:
eval `evalfile.sh`
Run Code Online (Sandbox Code Playgroud)配置并运行一个新的 shell:
#!/bin/sh
export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$JAVA_HOME/bin:$PATH
exec /bin/bash
Run Code Online (Sandbox Code Playgroud)
请注意,当您输入exit
此 shell 时,您将返回到父shell 。
将别名放入您的~/.bashrc
:
alias prepare_environ='export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22; export PATH=$JAVA_HOME/bin:$PATH;'
Run Code Online (Sandbox Code Playgroud)
并在需要时调用它:
prepare_environ
Run Code Online (Sandbox Code Playgroud)小智 20
你可以通过使用内置的源代码来做到这一点:
. script_name
Run Code Online (Sandbox Code Playgroud)
一些 shell 提供了一个名为source的别名:
source script_name
Run Code Online (Sandbox Code Playgroud)