无法使用awk中的系统导出变量

时间:2013-12-06 05:55:46

标签: linux shell awk ksh

我正在尝试使用awk解析输入xml文件(如下所示)以获取用户,密码和连接实例。我试图在shell上导出这些值,以便我可以在我的脚本中使用它们。 print显示正确的命令,但不知何故系统没有导出它。 我在Linux KSH上。

输入文件

> cat aa.xml
<Parameters>
   <Parameter Name="USER" Value="DB9"/>
   <Parameter Name="PASSWORD" Value="DB9"/>
   <Parameter Name="INSTANCE" Value="P1"/>
</Parameters>

代码:

    > awk -F '\"' '/<Parameter Name/,//{ cmd="export " $(NF-3) "=" $(NF-1); system(cmd); print cmd}' aa.xml

export USER=DB9
export PASSWORD=DB9
export INSTANCE=P1

> echo $PASSWORD

1 个答案:

答案 0 :(得分:1)

system(...)将在awk进程的子进程中执行,所以无论你做什么都不会影响父进程 - 你的shell。你可以这样做:

. <(awk -F '\"' '/<Parameter Name/,//{ print "export " $(NF-3) "=" $(NF-1) }' aa.xml)

source awk的输出,有效地在当前shell中运行export命令。