Sie können den Exit-Wert auf einen Wert ungleich Null setzen und dann eine Schleife ausführen, bis der Befehl mit einem Exit 0 (Erfolg) zurückkehrt. Hier ist ein Skript, das das hat:
#!/bin/sh
cd /exports/home/exports/sl
$(exit 1)
while [ $? != 0 ]; do rsync -avlH --delete --exclude=6.1/archive --exclude=6.1/i386/archive --exclude=6.1/x86_64/archive --exclude=6.1/i386/iso --exclude=
6.1/x86_64/iso rsync://rsync.gtlib.gatech.edu/scientific/6.1 6.1/; done
Nicht das beste Skript - es war eher ein Gedankenexperiment, um sicherzustellen, dass rsync neu gestartet wird, wenn es fehlschlägt, bis es erfolgreich abgeschlossen wurde.
Bearbeiten: In Ihrem Fall möchten Sie wahrscheinlich etwas wie:
#!/bin/sh
$(exit 1) ; while [ $? != 0 ]; do sleep 1 ; nc -vvv -z 192.168.15.37 22 && ssh 192.168.15.37 ; done
Sie können hier und da Fehlerbedingungen hinzufügen, aber das Wichtigste ist, sofort eine Verbindung herzustellen, sobald Sie überprüft haben, dass der Port geöffnet ist. Dafür ist die Operation && vorgesehen. Wenn der vorherige Befehl erfolgreich war, wird der nächste Befehl ausgeführt. (Bis dahin gibt eine fehlgeschlagene Verbindung einen Exit-Code ungleich Null zurück, wodurch die Schleife fortgesetzt wird.) Sobald Sie sich erfolgreich angemeldet und dann abgemeldet haben, beendet der Exit-Code, der von dieser erfolgreichen Anmeldesitzung zurückgegeben wird, die Schleife.
(Der Befehl sleep ist optional. Beachten Sie jedoch, dass Ihre Anzeige in einigen Fällen ohne Schlafschleife möglicherweise langsamer wird, bis Sie sie entweder minimieren oder zum nächsten Fenster wechseln. Dies kann ein Problem sein, wenn es sich bei Ihrer Anzeige um einen Remotedesktop handelt.)