ssh会话中的sh脚本未返回值

时间:2019-05-09 14:21:35

标签: ssh sh

我有以下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。

1 个答案:

答案 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;")