2015-05-16 59 views
1

您好即时试图从XML流设置一个变量,我可以输出使用该命令BASH可变从未设置

curl -s http://admin:[email protected]/Event/notification/alertStream | 
    awk -F"[<>]" '/eventDescription/{print $3}' 

XML流连续地输出eventDescription每秒从XML流的情况下。我的问题如何将它输出到BASH脚本中的变量。

这样做是行不通的,我认为它是因为Xml流从不停止输出。

MY_EVENT=$(curl -s http://admin:[email protected]/Event/notification/alertStream | 
    awk -F"[<>]" '/eventDescription/{print $3}') 
+2

$()的替代方法是使用反标记。没有可重复的curl命令,几乎不可能提供任何建设性的建议。 – boardrider

回答

1

试试这样说:

MY_EVENT=$(
    curl -s "$url" | \ 
    awk -F"[<>]" '/eventDescription/{print $3; exit}' 
) 

注意exit后的首场比赛停止处理。

+2

您不需要在管道后立即转义换行符。 shell会假定你想要继续这个命令。 – kojiro

+0

@kojiro:谢谢。将留在这里,以便您的评论继续有意义。 – joepd

0

假设问题是curl命令会一直持续提供输出,您需要的东西会定期将缓冲区刷新到管道另一端的命令。 POSIX awk本身没有这样的命令,但BSD awk确实有一个fflush函数(我在OS X上)。

+0

我不太确定...我猜这个变量只是在subhell结束时才设置为真。 ''id = $(echo 123; sleep 3; echo 456)''只会在子shell退出后返回控制权,此时变量赋值会发生。 – joepd