我有以下sh脚本代码,它们通过SSH访问我的本地路由器,以便找到路由器的真实IP地址(与我的VPN创建的表观IP相对)。
代码有效,我没有收到任何错误,但是没有返回我期望的字符串,即。 “外部IP为99.99.99.99
。”。
如果我在Terminal(ssh,getrealip.sh和echo)中分别执行这三个命令,那么它会完美运行。
有人知道我在这里想念什么吗?
在Mac OS上运行脚本以访问Asus路由器。脚本将从TextBar项目运行。
#!/bin/sh
myip=$(ssh admin@192.168.1.1 'myip=$(/usr/sbin/getrealip.sh); echo $myip')
echo "$myip"
exit
应导致“外部IP为99.99.99.99
”。字符串,但实际上返回null。
答案 0 :(得分:1)
很抱歉,我没有最有用的答案,但是根据我的经验,'
确实会解释字符串值。这样您将得到如下内容:
bash-4.3# echo '$(hostname -I)'
$(hostname -I)
尝试将'
字符替换为"
此外,请注意,子外壳将在ssh调用之前进行解释。因此您的PC将在连接到路由器之前尝试运行脚本。
也许我没有正确地阅读问题,但是您甚至可能不需要子外壳。如果SSH版本使用-t
选项,则为IDK。但我建议您将SSH命令更改为
myip=$(ssh admin@192.168.1.1 -t "sh /usr/sbin/getrealip.sh;")