Chcę użyć powłoki do wywołania skryptu na zdalnym serwerze. Chciałbym uchwycić dane wyjściowe tego skryptu (jego komunikaty rejestrowania) i kod wyjścia, który zwraca.
Jeśli to zrobię:
ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
Otrzymuję kod wyjścia, ale nie mogę przechwycić wiadomości zdalnego logowania.
Jeśli to zrobię:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?"
LOG "${RESULTS}";
Rejestruję dane wyjściowe za pomocą funkcji LOG, ale nie mogę uzyskać poprawnego kodu wyjścia, zakładam, że otrzymany kod jest kodem z przypisania zmiennej.
Chciałbym nadal używać mojej funkcji LOG do przechwytywania wszystkich danych wyjściowych podczas formatowania i wysyłania rzeczy do pliku, syslog i ekranu.
Jak przechwycić wyniki w zmiennej ORAZ uzyskać poprawny kod wyjścia ze zdalnego skryptu?
Odpowiedzi:
Powodem, dla którego nie otrzymujesz poprawnego kodu błędu, jest to, że
local
faktycznie jest to ostatnia wykonywana czynność. Przed uruchomieniem polecenia musisz zadeklarować zmienną jako lokalną.Możesz zobaczyć problem tutaj:
źródło
Problemem wydaje się „lokalny”. To działa dla mnie:
źródło
W rzeczywistości żadna z powyższych odpowiedzi nie przechwytuje kodu błędu i komunikatu ssh, co można wykonać w następujący sposób (zignoruj moje funkcje niestandardowe):
źródło