【问题标题】:Not able to export variable using system in awk无法在 awk 中使用系统导出变量
【发布时间】:2013-12-23 09:32:54
【问题描述】:

我正在尝试使用 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

【问题讨论】:

  • 你不能因为一个进程(awk 的实例或更糟的是它运行以执行system 命令的 shell 实例)不能影响另一个进程的环境(比如您调用 awk 的 shell)。这是在不同地方大量复制的。

标签: linux shell awk ksh


【解决方案1】:

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

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

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

【讨论】:

  • 它在版本93u+ 2012-02-29.
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 2021-08-22
  • 2019-01-17
  • 2022-01-16
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多