2017年3月23日 星期四

Asterisk check file exist example

之前透過 system() 來判斷,結果若單一資料夾內有多個符合條件的檔案則不回覆success造成誤判,其實system()的回覆狀態success也只是表示執行成功。

節錄:
FAILURE Could not execute the specified command
SUCCESS Specified command successfully executed
APPERROR Triggered for example when you try to delete a file but the file was not there.
NOTE - not documented, but can also return APPERROR
NOTE - I don't seem to be able to create a situation when FAILURE will be returned. 
※當然他在已知具體檔名的狀態下,確實能有判斷檔案是否存在的功用在。

之前的寫法...
exten => _99888,1,System(test -e /tmp/*87${EXTEN:3:3}*.call)
exten => _99888,n,NoOp(${SYSTEMSTATUS})
exten => _99888,n,GotoIf($["${SYSTEMSTATUS}" = "SUCCESS"]?start:end)

現在的寫法...

exten => _99888,1,Set(result=${SHELL(ls -rt /tmp/*87${EXTEN:2:3}*.call | head -1)})
exten => _99888,n,NoOp(${result})
exten => _99888,n,GotoIf($["${result}" = ""]?end:start)

若是有檔案存在result會存有檔案路徑,所以判斷是否為空值就可以了。

補充說明...
SYSTEM() 跟 SHELL()都有其方便的地方,看所需的功能用哪個比較不會出錯即可。

沒有留言: