我有一个bash脚本应该与我的Sky + HD盒连接并暂停它。这是一个盒子支持的服务,因为它与iPhone / iPad应用程序的协议相同。
为什么它不会保持连接有什么明显的明显之处?
(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 :(得分:0)
您的信箱可能具有访问权限限制,使其无法与正在运行该脚本的计算机建立连接。
作为一般建议:
$line
以防止发生令人讨厌的事情,例如:echo 'foo'"$list"'bar'
(注意双引号); telnet
,这意味着更多用于交互式使用,请使用nc
(netcat):echo 'stuff' | nc -n 192.168.1.82 49153
;这可能有助于解决您的连接问题,如果您的telnet
试图变得聪明并且在发送数据之前确认了telnet协议特定参数; echo
来发送数据,因此您无需在子shell中运行它,因此不需要括号(
)
; < / LI>
cat <<EOF
而不是echo
(在bash手册中查看此处 - 文档)