2017-03-15 161 views
2

我有作品從外殼運行sed的傳遞變量環境

/bin/sed -i -e '/^\['"9876"'\]/ r /etc/asterisk/tmp_'"9876"'.txt' /etc/asterisk/sip_peers.include 

從sh腳本運行它運行這個sed的命令,這是行不通的:

#!/bin/bash 

peers=/etc/asterisk/sip_peers.include 
tmp=/etc/asterisk/tmp_$ext.txt 

var=`cat < $tmp` 
printenv > /etc/asterisk/zprintenv.txt 
echo $tmp $ext > /etc/asterisk/zoutput.txt 
/bin/sed -i -e '/^\['"$ext"'\]/ r /etc/asterisk/tmp_'"$ext"'.txt' /etc/asterisk/sip_peers.include 

$ ext是一個環境當我將printenv傳遞給文本文件時,它仍然存在。另外$ ext變量被傳遞給output.txt用於測試目的。

sip_peers.include,其中來自/etc/asterisk/tmp_$ext.txt的值將後[]插入:

[9876] 
qualify=yes 
nat=yes 
call-limit=4 
.... 

輸出zoutput.txt:從

/etc/asterisk/tmp_9876.txt 9876 

片斷zprintenv.txt:

contacts=1 
vm=1 
ext=9876 
emergency_trunk= 
callerid_override= 
enduser_company_contacts=0 
..... 

輸出$ TMP:

;mac=e02f6d613554 
;model=spa504G 

請看看它,我無法找到小時以來的錯誤。 非常感謝

+0

這裏'ext'變量的值是什麼?它不存在於這裏,你能分享你試過的輸入文件嗎? – Inian

+0

嗨,我已更新我的問題。 – calabash

+0

這一個解決了。這是一個運行時間問題。該腳本是從gui調用的,而腳本執行後會存儲sip_peers.include文件。所以sed不能寫入這個文件。感謝您的幫助,併爲此感到困惑 – calabash

回答

0

引用OP評論:
這是一個運行時問題。
從gui調用該腳本,執行腳本後存儲文件sip_peers.include 。所以sed不能處理不存在的文件。所以我通過引用來自OP評論的回答,
與提議的標題編輯相匹配來製作Q/A對,以供用戶找到類似的問題。)