Я хочу использовать оболочку для вызова скрипта на удаленном сервере. Я хотел бы захватить выходные данные этого скрипта (его сообщения журнала) и код завершения, который он возвращает.
Если я сделаю это:
ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
Я получил код выхода, но не могу перехватить сообщения удаленной регистрации.
Если я сделаю это:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?"
LOG "${RESULTS}";
Я могу записать свой вывод, используя мою функцию LOG, но не могу получить правильный код завершения, я предполагаю, что полученный код - это код из присваиваемого переменной.
Я хотел бы продолжать использовать мою функцию LOG для захвата всех выходных данных, поскольку он форматирует и отправляет вещи в файл, системный журнал и экран для меня.
Как я могу получить результаты в переменной И получить правильный код завершения из удаленного сценария?
Ответы:
Причина, по которой вы не получаете правильный код ошибки, заключается в том, что
local
на самом деле выполняется последнее. Вам нужно объявить переменную как локальную перед выполнением команды.Вы можете увидеть проблему здесь:
источник
Кажется, проблема в «местном». Это работает для меня:
источник
На самом деле ни один из ответов выше не перехватывает код ошибки ssh и сообщение, что можно сделать следующим образом (игнорируйте мои пользовательские функции):
источник