Код выхода выполнения предыдущей команды всегда равен 0 - в удаленном выполнении оболочки $? - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь выполнить сценарий. На полпути сценария он выполняет часть кода в удаленной оболочке, а затем снова возвращается к той же локальной оболочке.

Однако мой вопрос касается кодов завершения команды, выполняемой в удаленной оболочке.Я пытаюсь сделать решение в удаленном с if-then-else на основе кодов выхода.Когда это не сработало, как ожидалось, я попытался сузить проблему.

Вот мои выводы,

Вывод всегда IP. Найдено, как $?всегда равно 0.

ssh root@<remote server> bash -c "'
host www.google.com123
if [ $? != 0 ]
then
    echo "Invalid Host"
else
    echo "IP Found"
fi

'"

Кроме того, в этом случае ожидается один и тот же вывод

ssh root@<remote server> bash -c "'
host www.google.com
if [ $? != 0 ]
then
    echo "Invalid Host"
else
    echo "IP Found"
fi

'"

Ссылка: я узнал об этом методе удаленного выполнения с здесь

Пожалуйста, помогите мне понять это поведение удаленного выполнения оболочки.Также, если есть какие-либо другие способы выполнить часть shell-скрипта в удаленном режиме через ssh, пожалуйста, предложите.

1 Ответ

0 голосов
/ 16 декабря 2018

Внешние кавычки - это двойные кавычки, поэтому $? расширяется локально, прежде чем вы запустите bash удаленно.Вместо этого используйте

ssh root@<remote server> 'bash -c "
host www.google.com123
if [ \$? != 0 ]
then
    echo \"Invalid Host\"
else
    echo \"IP Found\"
fi

"'

. Проще - вообще не проверять $?:

ssh root@<remote server> 'bash -c "
if ! host www.google.com123
then
    echo \"Invalid Host\"
else
    echo \"IP Found\"
fi

"'

Еще проще - не запускать вторую ненужную оболочку.

ssh root@<remote server> '
if ! host www.google.com123
then
    echo "Invalid Host"
else
    echo "IP Found"
fi
'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...