运行 Ubuntu 18.04-x64
我运行以下 bash 脚本:
#!/bin/bash
if [ -z $JAVA_HOME ]; then
PLACE=`which java`
QUOTE='"'
VAR_NAME="JAVA_HOME="
echo "$VAR_NAME$QUOTE$PLACE$QUOTE" >> /etc/environment
fi
source /etc/environment
我运行echo $JAVA_HOME
并得到空白输出
如果我在终端中输入以下命令
source /etc/environment
echo $JAVA_HOME
我得到/usr/bin/java
输出
为什么source /etc/environment
脚本内部不起作用?
答案1
您可以获取脚本而不是执行它。然后脚本的source
命令将出现在您当前的 shell 中。
此外,JAVA_HOME 应该是一个目录:
printf 'JAVA_HOME="%s"\n' "$(dirname -- "$PLACE")" >> /etc/environment
这也允许您删除 VAR 和 QUOTE 变量
还, 你必须使用引号:[ -z "$JAVA_HOME" ]
- 如果 JAVA_HOME 实际上是空的,那么 shell 会看到
[ -z ]
- 只有一个参数,
[
如果参数本身是,则命令返回 true不是空的。 - 由于字符串“-z”永远不会为空,因此条件是总是真的,
- 并且每次您都会在 /etc/environment 中获得一个新的 JAVA_HOME=... 。