【发布时间】:2016-01-26 14:11:07
【问题描述】:
在我的系统上,我安装了两个版本的 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 page(搜索“别名”)声明这是作为直接替换完成的。为什么这不起作用有什么原因吗?
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,因此显式运行二进制文件是正确的。 -
关于你的编辑:正如我已经说过的,当你输入
foo 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"'. -
好的,这里有几个问题。一个是我问的问题(为什么不是别名设置变量?),令人困惑的因素是运行
java使用/bin/java,它使用1.8 而不管JAVA_HOME变量。 -
重新阅读所有这些,看来您的问题只是来自使用引号
'!只是鞭打报价:alias j7=JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.*.jdk/Contents/Home/可以正常工作! -
@F.Hauri 对我不起作用。如果您已经执行了不止一次(即
j7 ; j7 echo $JAVA_HOME),那么它可以工作。
标签: bash shell environment-variables alias