我编写了一个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',但无济于事
此脚本的最终目标是将电话号码发送到集团设备到另一个系统时用作CID。
感谢您提前提供的所有帮助
答案 0 :(得分: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
处于无限循环中。将exit
添加到awk
脚本会在找到第一个电话号码时终止循环。 awk
立即退出并将其输出放入变量中,tail -f
在尝试将下一行写入管道时获取SIGPIPE信号,从而导致其退出。