0

我有一个 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
4

1 回答 1

1

您的盒子可能有访问限制,使其不允许从您运行脚本的机器进行连接。

作为一般建议:

  1. 引用$line以防止发生令人讨厌的事情,例如:(echo 'foo'"$list"'bar'注意双引号);
  2. 使用(netcat):代替,telnet这意味着更多的交互使用 这可能有助于解决您的连接问题,如果您在发送数据之前尝试变得聪明并协商 telnet 协议的特定参数;ncecho 'stuff' | nc -n 192.168.1.82 49153telnet
  3. 由于您只使用一个命令 ,echo来发送数据,因此您不需要在子 shell 中运行它,因此( )不需要括号;
  4. 当您有多行要输出时,请考虑使用cat <<EOF而不是echo(在 bash 手册中查找此处的文档)
于 2013-08-16T14:18:54.070 回答