源 /etc/environment 无法通过 bash 脚本运行

源 /etc/environment 无法通过 bash 脚本运行

运行 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=... 。

相关内容