Próbuję zautomatyzować kilka typowych zadań, które wykonuję SSH do zdalnego serwera. W tym celu używam PuTTY i jego opcji „polecenia zdalnego” (Połączenie> SSH) w kilku zapisanych sesjach. Moje zdalne polecenie wygląda mniej więcej tak:
~/scripts/test; $SHELL -l
Wykonywany skrypt różni się w zależności od zapisanej sesji i wykonuje różne zadania. $SHELL -l
utrzymuje sesję PuTTY aktywną po zakończeniu wykonywania skryptu.
Wszystko to działa idealnie dla większości skryptów, które uruchamiam. Mam jednak taki, który używa pętli while do wykonania szeregu poleceń, dopóki nie zakończy się kombinacją Ctrl + C. Skrypt uruchamia się dobrze, ale powłoka PuTTY nie pozostaje aktywna po zakończeniu. $SHELL -l
nie wydaje się być wykonywany.
Przykładowy skrypt z takim zachowaniem jest następujący:
while true; do
echo "."
sleep 2
done
Poniższe działa dobrze wykonane ręcznie, widzę oczekiwane dane wyjściowe z drugiego polecenia:
~/scripts/test; echo "done"
Jednak drugie polecenie „polecenia zdalnego” PuTTY nie jest wykonywane. Rzeczywiście, jeśli zmienię komendę zdalną na „an” echo
, nie zostanie ona wyświetlona.
~/scripts/test; echo "done"; $SHELL -l
Myślę więc, że moje pytanie brzmi: dlaczego drugie polecenie na liście nie jest wykonywane przez polecenie zdalne, podczas gdy jest uruchamiane ręcznie? A co ważniejsze, co mogę z tym zrobić?
Jeśli to istotne, używam PuTTY na Ubuntu 14.04.
ssh
(OpenSSH)? To powinno być domyślnie zainstalowane na Ubuntu. Lub jeśli naprawdę musisz korzystać z PuTTY, użyjplink
, który jest specjalnie zaprojektowany do automatyzacji.