ksh不评估从文件中读取的变量

时间:2014-07-28 13:31:44

标签: shell

问题是如何评估从文件读取的完整$变量。

我有python和ksh shell的程序组合。 ksh shell执行一个python脚本,该脚本读取xmlfile&返回一个类路径&出口和销售的可用物品命令执行。

在我的情况下,xml文件如下所示

  1<script>
  2          <scriptPath>/home/opapp/apps/ampFeed</scriptPath>
  3         <JAVA_HOME>/local/opt/sunjava-1.6.0_01/jre</JAVA_HOME>
  4         <classpath>"./properties/prod"</classpath>
  5         <classpath>"lib/activation.jar"</classpath>
  6         <classpath>"lib/antlr-2.7.6.jar"</classpath>
           .......
  40         <executionCmd>"$JAVA_HOME/bin/java"</executionCmd>
  43        <executionCmd>"-Dtarget.db.properties=/home/opapp/apps/ampFeed/properties/pr        od"</executionCmd>
  44         <executionCmd>"-classpath"</executionCmd>
           ..........
   </script>

我的Shell脚本非常简单

$0 == XMlFile
typeset -x JAVA_HOME=`${HOME}/scripts/readXmlFile.py -s $0 -e "JAVA_HOME"
typeset -x CLASSPATH=`${HOME}/scripts/readXmlFile.py -s $0 -e "CLASSPATH"
EXECUTION_CMD=`${HOME}/scripts/readXmlFile.py -s $0 -e "CLASSPATH"

export JAVA_HOME
export CLASSPATH
print JAVA_HOME=$JAVA_HOME
print CLASSPATH=$CLASSPATH
print EXECUTION_CMD=$EXECUTION_CMD

$EXECUTION_CMD 

输出如下: -

JAVA_HOME="/local/opt/java7/jre"
CLASSPATH=:"./properties/dev1":"lib/activation.jar":"lib/antlr-2.7.6.jar":"lib/aopalliance.jar"
EXECUTION_CMD="$JAVA_HOME/bin/java" -Dtarget.db.properties=/home/opappqa/apps/Feed/properties/dev1" "-classpath" "$CLASSPATH" "ampFeed.generator.FeedGenerator" "-Xms128M" "-Xmx512M"
line 41: "$JAVA_HOME/bin/java": not found

问题是如何评估完整的CLASSPATH&amp; JAVA_HOME

1 个答案:

答案 0 :(得分:1)

使用eval将字符串视为代码:

eval "$EXECUTION_CMD"

否则,POSIX sh行为(跟随ksh)仅运行字符串拆分和glob扩展解析阶段,不允许将字符串的任何部分视为语法。

尽管如此,请参阅BashFAQ #50以获取有关以编程方式生成代码的最佳实践的信息。 (有些建议只有bash,但是很多也适用于ksh)。