2016-07-29 19 views
3

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

#!/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 

请你告诉我在哪里一切都错了吗?

+2

变量'varname','varvalue'和'filename'在此声明''回声“$ VARNAME = $ varvalue“> $ filename''用单引号括起来,所以它们不会被扩展,而是使用双引号:''echo $ varname = $ varvalue> $ filename”' – hflzh

+0

请zhliu03 wai一会儿。我会试试 –

+0

Thanx,zhliu03,你刚刚救了我......我怎样才能标记你的答案有帮助? –

回答

0

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

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

echo "$varname=$varvalue" > $filename

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

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