【发布时间】:2013-07-19 16:45:18
【问题描述】:
我已经编写了一个 bash 脚本,它将过滤“尾”输出,整个命令
tail -f /var/log/asterisk/messages | awk 'match($12, /[^0-9]91([0-9]{10})@default/, a) {print a[1]}'
在 CLI 中可以正常工作,但放在 bash 脚本中时不能:
#!/bin/bash
phonenumber=$(tail -f /var/log/asterisk/messages | awk 'match($12, /[^0-9]91([0-9]{10})@default/, a) {print a[1]}')
echo "$phonenumber >> test.log"
不输出任何东西,(2135551234,是预期的输出字符串)我尝试写入日志文件并只写入标准输出,但都不起作用。
我尝试过使用“cat”而不是“tail”的脚本,效果很好。但我不想转储整个文件的输出,因此使用'tail'。
我也尝试过使用'tee'但无济于事
此脚本的最终目标是将进入 PBX 的电话号码发送到串行设备到另一个系统并用作 CID。
提前感谢您的所有帮助
【问题讨论】:
-
tail -f永远不会退出。 -
@Barmar 您应该扩展您的评论(解释发生了什么)并将其作为答案发布。
-
@JimGarrison 遥遥领先
-
你已经用
$( tail -f ... )将你的调用封装在命令替换中的tail中。因此,该命令必须先完成,然后才能关闭已启动的子 shell 并返回曾经打印的内容。对不起,但我认为你必须重新考虑你的设计。祝你好运。
标签: linux bash awk serial-port tail