在我的系统上,我安装了两个版本的Java - 有些程序需要Java 7,有些需要Java 8。
Java 8是我的系统默认版本,所以当我运行Java 7命令时,我使用的是:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.*.jdk/Contents/Home/ \
java_7_program
我想设置一个别名以便我可以代替写
j7 java_7_program
我已经定义:
alias j7='JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.*.jdk/Contents/Home/'
但是运行j7 java -version
会产生以下结果:
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
man页面(搜索“别名”)指出这是直接替换。那么为什么这不起作用呢?
bash --version
会打印GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
以下是一个更简单的例子(没有Java):$ alias foo='BAR=baz'
$ type foo
foo is aliased to `BAR=baz'
$ foo echo $BAR
[blank line]
foo env
命令,你会发现 BAR 的值被设置为 baz。同时,运行foo /bin/echo $BAR
命令也应该可以正常工作。区别在于 echo 是一个 shell 内置命令,所以显式地运行二进制文件才能得到正确的结果。 - Richardfoo echo $BAR
时,BAR
并没有在当前shell中设置,而是在echo
的环境中设置;并且$BAR
在echo
运行之前被展开。尝试以下任何一种方法,您会发现它可以工作:1. 在单独的一行上键入foo
,然后在其后键入echo $BAR
或等效地键入foo; echo "$BAR"
;2.foo eval 'echo "$BAR"'
;3.(某种程度上类似)foo bash -c 'echo "$BAR"'
。 - gniourf_gniourfjava
时使用的是/bin/java
,它无论JAVA_HOME
变量如何设置都会使用1.8版本。 - Fabian Tamp'
的使用!只需删除引号:alias j7=JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.*.jdk/Contents/Home/
就可以正常工作了! - F. Hauri - Give Up GitHubj7 ; j7 echo $JAVA_HOME
),那么它会起作用。 - Fabian Tamp