Скрипт sh внутри сессии ssh не возвращает значение - PullRequest
0 голосов
/ 09 мая 2019

У меня есть следующий код скрипта sh, который обращается к моему локальному маршрутизатору через SSH, чтобы найти реальный IP-адрес маршрутизатора (в сравнении с очевидным IP-адресом, созданным моей VPN).

Код работает, и я не получаю ошибок, но он не возвращает ожидаемую строку, т.е.«Внешний IP - это 99.99.99.99.».

Если я выполню каждую из 3 команд отдельно в Терминале (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».строка, но на самом деле возвращает ноль.

1 Ответ

1 голос
/ 09 мая 2019

Я прошу прощения за не самый полезный ответ, но из моего опыта, ' буквально интерпретирует строковые значения. Таким образом, вы получите что-то вроде этого:

bash-4.3# echo '$(hostname -I)'
$(hostname -I)

Попробуйте заменить ' символов на "

Также помните, что подоболочки будут интерпретироваться ДО вызова ssh. поэтому ваш компьютер попытается запустить сценарий до того, как он подключится к вашему маршрутизатору.

Может быть, я не правильно читаю вопрос, но вам может даже не понадобиться подоболочка. IDK, если версия SSH использует опцию -t. но я бы порекомендовал вам изменить команду SSH на

myip=$(ssh admin@192.168.1.1 -t "sh /usr/sbin/getrealip.sh;")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...