我有以下问题。我需要创建系统范围的JDK_HOME
和JAVA_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
请您告诉我哪里出了问题?
答案 0 :(得分:0)
虽然您可以删除单引号,但没有理由创建子流程并使用sh -c
。
更改sh -c 'echo "$varname=$varvalue" > $filename'
到echo "$varname=$varvalue" > $filename
和sh -c 'echo "$varname=$varvalue" >> $filename'
到echo "$varname=$varvalue" >> $filename