2013-08-16 63 views
0

我有一個應該與我的Sky + HD盒連接並暫停它的bash腳本。這是一個由該框支持的服務,因爲它與iPhone/iPad應用程序的協議相同。用telnet「連接被外部主機關閉」的Bash腳本

有什麼明顯的,爲什麼它不會保持連接?

(echo 'POST /SkyPlay2 HTTP/1.1 
SOAPACTION: "urn:schemas-nds-com:service:SkyPlay:2#SetAVTransportURI" 
Content-Type: text/xml; charset=utf-8 
Content-Length: 399 

<?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:SetAVTransportURI xmlns:u="urn:schemas-nds-com:service:SkyPlay:2"><InstanceID>0</InstanceID><CurrentURI>xsi://'$line'</CurrentURI><CurrentURIMetaData>NOT_IMPLEMENTED</CurrentURIMetaData></u:SetAVTransportURI></s:Body></s:Envelope>') | telnet 192.168.1.82 49153 

回答

0

您的郵箱可能具有訪問限制,使其不允許來自您運行腳本的計算機的連接。

作爲一般性的建議:

  1. 做報價$line防止討厭的事情發生,如:echo 'foo'"$list"'bar'(注意雙引號);
  2. 而不是telnet,這意味着更多的交互使用,使用nc(netcat):echo 'stuff' | nc -n 192.168.1.82 49153;如果您的telnet在通過telnet協議特定的參數發送數據之前嘗試變得聰明並且相互關聯,這可能有助於解決連接問題;
  3. 因爲你只使用一個命令,echo,發送數據時,你不需要在子shell中運行,所以括號不需要();
  4. 當您有多條線路輸出,可以考慮使用的cat <<EOF代替echo(查找在bash的手冊在這裏的文檔)
+0

非常感謝您的幫助!除了第一點我都明白,我應該引用什麼,我沒有? – user2689371

+0

在您粘貼的代碼中,最後一行包含' xsi://'$ line'' - 正確的格式爲' xsi://'「$ line」'' –

+0

nc -n是問題,它看起來像Sky + HD盒子不接受telnet(雖然它曾經) – user2689371

相關問題