从bash脚本添加到/etc/profile.d失败

时间:2016-07-29 07:32:57

标签: bash environment-variables

我有以下问题。我需要创建系统范围的JDK_HOMEJAVA_HOME变量。首先,我想创建/etc/profile.d/java.sh并添加 JDK_HOME到它。然后我想将JAVA_HOME追加到此文件中。到目前为止,我有这段代码。

#!/bin/bash

create_env_var()
{
    local varname="$1"
    local varvalue="$2"
    local filename="/etc/profile.d/$3"
    if [ -e "$filename" ]; then
        echo "**ERROR: file $filename already exists"
    else
        sh -c 'echo "$varname=$varvalue" > $filename'
        chmod +x "$filename"
    fi
}

append_env_var()
{
    local varname="$1"
    local varvalue="$2"
    local filename="/etc/profile.d/$3"
    if [ ! -e "$filename" ]; then
        echo "**ERROR: file $filename not found"
    else
        sh -c 'echo "$varname=$varvalue" >> $filename'
        chmod +x "$filename"
    fi
}

create_env_var "JDK_HOME" "/usr/lib/jvm/java-7-openjdk-i386" "java.sh"
append_env_var "JAVA_HOME" "/usr/lib/jvm/java-7-openjdk-i386" "java.sh"

exit "$?"

但是这些行不起作用,我看到以下错误:

sh: 1: cannot create : Directory nonexistent
chmod: cannot access ‘/etc/profile.d/java.sh’: No such file or directory

请您告诉我哪里出了问题?

1 个答案:

答案 0 :(得分:0)

虽然您可以删除单引号,但没有理由创建子流程并使用sh -c

更改sh -c 'echo "$varname=$varvalue" > $filename'

echo "$varname=$varvalue" > $filename

sh -c 'echo "$varname=$varvalue" >> $filename'

echo "$varname=$varvalue" >> $filename