我在.bashrc
文件中创建了这个别名:
alias changepath="export PATH=$JAVA_HOME/bin:$PATH"
我想要做的是更改$JAVA_HOME
,然后更改$PATH
以包含新的$JAVA_HOME/bin
。
当我更改$JAVA_HOME
并输入此命令而不是使用别名时,它会按预期工作。
但是,当我更改$JAVA_HOME
然后使用别名时,changepath
命令会将旧$JAVA_HOME/bin
而不是新$JAVA_HOME/bin
添加到$PATH
。
我该如何解决这个问题?
答案 0 :(得分:3)
您还可以通过单引用别名定义推迟对变量的评估,即
alias changepath='export PATH=$JAVA_HOME/bin:$PATH'
请注意,别名或功能解决方案无法解决清除您设置的任何先前JAVA_HOME的问题。
所以你最终可以找到疯狂的PATH
PATH="/usr/bin:/sys"
PATH=/usr/bin/java:/usr/bin:/sys
PATH=/usr/bin/java/bin:/usr/bin/java:/usr/bin:/sys
答案 1 :(得分:2)
尝试改为使用函数:
changepath () {
export PATH="$JAVA_HOME/bin:$PATH";
}
在您设置别名时,会解释"$JAVA_HOME
和$PATH
。因此,它们固定在执行.bashrc
。
使用函数,变量将在启动时解释。
注意:我复制/粘贴您
export PATH=...
,但请注意,每次发布时都会添加$PATH
的内容。
答案 2 :(得分:1)
这就是我如何处理Java 7和8 SDK之间的更改问题。我相信有人可以改进这些bash功能,但我想重要的部分是使用 sed 来编辑路径。
这将找到并替换JAVA_HOME值,而不是继续添加到PATH变量。
function java7 () {
export PATH=$(echo $PATH | sed s~$JAVA_HOME~${JAVA_7_HOME}"/bin"~)
export JAVA_HOME="${JAVA_7_HOME}";
}
function java8 () {
export PATH=$(echo $PATH | sed s~$JAVA_HOME~${JAVA_8_HOME}"/bin"~)
export JAVA_HOME="${JAVA_8_HOME}";
}
答案 3 :(得分:1)
我需要在8到11之间切换,所以我要做的是:
export NO_JAVA_PATH=$PATH
export JAVA_HOME="<path>"
export PATH=$JAVA_HOME/bin:$PATH
alias j8='export JAVA_HOME="<path>" ; export PATH=$JAVA_HOME/bin:$NO_JAVA_PATH'
alias j11='export JAVA_HOME="<path>" ; export PATH=$JAVA_HOME/bin:$NO_JAVA_PATH'