2013-07-19 155 views
3

我已經寫了bash腳本,將過濾「尾巴」輸出,其全部命令尾不提供在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,是預期的輸出字符串)我已經嘗試寫入日誌文件並只寫stdout但都不工作。

我已經試過腳本使用'貓'而不是'尾巴',並且工作正常。但我不想轉儲整個文件的輸出,因此使用'尾巴'。

我一直在使用「三通」,但也試過無濟於事

這個腳本的最終目標與要發送的電話號碼,因爲它涉及到PBX將串行設備到另一個系統,並作爲CID。

感謝所有幫助提前

+1

'tail -f'永遠不會退出。 – Barmar

+0

@Barmar你應該擴大你的評論(解釋發生了什麼)並將其作爲答案發布。 –

+0

@JimGarrison在你之前 – Barmar

回答

4

試試這個:

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

您的版本不工作,因爲tail -fawk是一個無限循環。當找到第一個電話號碼時,將exit添加到awk腳本將終止循環。 awk立即退出並將其輸出放入變量中,並且tail -f在試圖將下一行寫入管道時會獲取SIGPIPE信號,從而導致該管道退出。

+0

'@ Barmar'謝謝你的光臨 – Iz3k34l