3

我编写了一个 bash 脚本,它将过滤“tail”输出,整个命令

 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。

提前感谢您的所有帮助

4

1 回答 1

4

试试这个:

phonenumber=$(tail -f /var/log/asterisk/messages | awk 'match($12, /[^0-9]91([0-9]{10})@default/, a) {print a[1]; exit}')

您的版本不起作用,因为tail -f并且awk处于无限循环中。当找到第一个电话号码时,添加exitawk脚本会终止循环。awk立即退出并将其输出放入变量中,并tail -f在尝试将下一行写入管道时获得 SIGPIPE 信号,这将导致它退出。

于 2013-07-19T16:50:52.837 回答