lzw83 发表于 2011-10-25 20:57:26

ROS学习笔记:小问题,折腾人

:local ednsuser "user"
:local ednspass "pass"
:local ednshost "user.3322.org"
:local ednsinterface "pppoe-out1"
:local members "http://members.3322.org/dyndns/update?system=dyndns"
#:local members "http://members.dyndns.org/nic/update?"
:local status
:local status running]
:if ($status!=false) do={
:local ednslastip [:resolve $ednshost]
:if ([ :typeof $ednslastip ] = nil ) do={ :local ednslastip "0" }
:local ednsiph [ /ip address get address ]
:local ednsip [:pick $ednsiph 0 [:find $ednsiph "/"]]
:local ednsstr "&hostname=$ednshost&myip=$ednsip"
:if ($ednslastip != $ednsip) do={/tool fetch url=($members . $ednsstr) mode=http user=$ednsuser password=$ednspass dst-path=$ednshost
:delay 2
:local result
:log info ($ednshost . " " .$result)
/file remove $ednshost ;
}
}

上面这段3322动态域名更新是在本论坛上找的,里面就有这么一个小小的问题,但是我却没看到有人给新手们指出来——字符的转义。
:local members "http://members.3322.org/dyndns/update?system=dyndns"
就是这一句,折腾我好几个小时,还上3322官网上看他的API说明。问题出在哪?
就在那个“?”上面了,在ROS里执行会被认为是一个查询而被省略掉了。
正确的应该是
:local members "http://members.3322.org/dyndns/update\?system=dyndns"
一个小小的转义字符“\”,:')

ksw520 发表于 2011-10-25 21:56:50

楼主您说的这个问题貌似并不存在,在4.17 和 5.7上我都在使用这个脚本。一些4.10的版本运行此脚本超过1年了。

lzw83 发表于 2011-10-25 22:26:03

ksw520 发表于 2011-10-25 21:56 static/image/common/back.gif
楼主您说的这个问题貌似并不存在,在4.17 和 5.7上我都在使用这个脚本。一些4.10的版本运行此脚本超过1年了 ...

http://bbs.routerclub.com/data/attachment/album/201110/25/222235tvt8e8vtdza88zim.jpg

我之前用的是3.30
你说在4.17和5.7上可以,我也尝试了在5.7个,但也是一样会出错的
:local members "http://members.3322.org/dyndns/update?system=dyndns"
不用转义符,一复制这一段进去就会出现红色圈“1”的显示

:local members "http://members.3322.org/dyndns/update\?system=dyndns"
用了转义符,就能出现蓝圈里正解的命令显示

ksw520 发表于 2011-10-25 22:32:37

terminal 对脚本的解析方式与 scripts中是有少许区别的。

lzw83 发表于 2011-10-25 22:36:01

加上准没错的
我没加就总是更新不了

zhjchina 发表于 2011-10-25 23:13:44

我承认,楼主说的是正确的,如果你是在ssh登录进去添加脚本的话。

我也发现了这个问题,不过没有像楼主这样热心发帖。
页: [1]
查看完整版本: ROS学习笔记:小问题,折腾人