lee1080 / CloudflareSpeedTestDDNS

使用CloudflareSpeedTest工具优选IP后自动DDNS到Cloudflare
465 stars 158 forks source link

运行错误 #1

Closed lingbaoboy closed 1 year ago

lingbaoboy commented 1 year ago

ip.sh 20行,括号不识别报错 ip.sh末尾行为 . cf_ddns 实际运行时报 ./ip.sh: .: line 49: cf_ddns: not found 将末尾行修改成绝对路径,错误消失。

在运行cf_ddns时又会报错 /root/cfip/cf_ddns: line 12: syntax error: bad substitution

设备:R2S ARMv8 已经安装jq 直接运行CloudflareST正常

lee1080 commented 1 year ago

没有在R2S测试过。可以尝试将最后一一行的 点 改为 source,看看能不能正常运行 . cf_ddns修改为 source cf_ddns

lingbaoboy commented 1 year ago

非常感谢,我使用了你今天更新的2.1版本 发现原来的错误主要是我没有使用 bash ip.sh 而是使用了 ./ip.sh 来运行 囧,不知道这两个运行方式有啥区别,我还是第一次遇到这样的报错

lingbaoboy commented 1 year ago

也可以直接运行 Bash 解释器,将脚本文件的名字作为参数传递给 Bash,如下所示:

[mozhiyan@localhost ~]$ cd demo               #切换到 test.sh 所在的目录
[mozhiyan@localhost demo]$ /bin/bash test.sh  #使用Bash的绝对路径
Hello World !                                 #运行结果

通过这种方式运行脚本,不需要在脚本文件的第一行指定解释器信息,写了也没用。

我检索了一下,发现可能是你没在脚本首行指定解释器😊

lingbaoboy commented 1 year ago

我看你脚本,你首行解释器为 #!/bin/sh 我测试下改成 #!/bin/bash 就可以完美运行了

lingbaoboy commented 1 year ago
完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。
测速完毕
sh: 0: unknown operand
sh: 0: unknown operand
sh: ss: unknown operand
已重启bypass
为保证cloudflareAPI连接正常 将在30秒后开始更新域名解析

可以成功更改dns,中间出的那几个unknown就不知道是什么了

lingbaoboy commented 1 year ago

脚本还有一个重要的问题是只能cd进入脚本所在的目录才可以运行,如果使用绝对路径的话就会运行失败 这样就导致了定时计划不好写 期望是ip.sh可以自动将自己所在目录设置为当前的工作目录 这方面我还是小白,不会写😂

lee1080 commented 1 year ago

我看你脚本,你首先解释器为 #!/bin/sh 我测试下面改成 #!/bin/bash 就可以完美运行了

对,我之前也是小白,是有这个需求才去临时学的shell,首行解释器一会儿我去把他修改了

lingbaoboy commented 1 year ago

再加个

#进入当前目录 
cd ${0%/*}  

这样就可以使用绝对路径执行了,只要需要的东西和ip.sh在一个目录,我刚才测试了

lee1080 commented 1 year ago
完整测速结果已写入 result.csv 文件,可使用记事本/表格软件查看。
测速完毕
sh: 0: unknown operand
sh: 0: unknown operand
sh: ss: unknown operand
已重启bypass
为保证cloudflareAPI连接正常 将在30秒后开始更新域名解析

可以成功更改dns,中间出的那几个unknown就不知道是什么了

这个可能是因为通过指令重启bypass有问题,毕竟平台不一样,你试试/etc/init.d/bypass stop/etc/init.d/bypass stop能不能控制bypass停止和重启,如果没能停止测速,会对测速结果有影响。

lee1080 commented 1 year ago

再加个

#进入当前目录   
cd ${0%/*}    

这样就可以使用绝对路径执行了,只要需要的东西和ip.sh在一个目录,我刚才测试了

可以在计划任务写cd /root/你存放的目录/ && bash ip.sh也是在同一个目录执行

lingbaoboy commented 1 year ago

脚本要是可以自己进入目录比较好,这样就避免了我这样的小白犯错误了

lee1080 commented 1 year ago

脚本要是可以自己进入目录比较好,这样就避免了我这样的小白犯错误了

做计划任务没办法,得找到脚本的位置才能做