So führen Sie nach dem Beenden von ssh automatisch einen Befehl aus

10

Wie kann ich nach dem Beenden einer sshVerbindung automatisch einen Befehl auf dem lokalen Terminal ausführen ? Gibt es einen Hook oder ein Ereignis, das dafür behandelt werden könnte?

Meysam
quelle

Antworten:

13

Nutzen Sie eine aliasoder eine bessere Funktion.

Beispielsweise:

ssh () { command ssh "$@"; echo foobar; }

Jetzt können Sie ausführen:

ssh mysite

Nach dem Verlassen der sshSitzung echo foobarwird ausgeführt.

Ändern Sie echo foobarmit dem tatsächlichen Befehl, den Sie ausführen müssen, und natürlich können Sie mehrere Befehle anheften, wenn Sie möchten.

Um die Funktionsdefinition dauerhaft zu machen, fügen Sie sie in Ihre ein ~/.bashrc.


Beachten Sie auch, dass es möglicherweise nicht immer erwünscht ist, die Funktion so zu benennen, als ob Sie sshdie externe Funktion explizit verwenden möchten ssh. In diesem Fall können Sie eine der folgenden Optionen verwenden, um die sshFunktion zum Abrufen einer externen sshBinärdatei zu überspringen :

command ssh mysite

oder benennen Sie die Funktion in etwas anderes um, z sshfunc.

sshfunc () { ssh "$@"; echo foobar; }
heemayl
quelle
4
Hinweis: Ich empfehle, die Funktion in etwas anderes als "ssh" umzubenennen, damit Sie die ursprüngliche Bedeutung von ssh beibehalten ... vielleicht: ssh2? oder sshcmd? (Andernfalls könnten Sie die Nebenwirkungen vergessen, wenn Sie Dinge tun wie ssh user@host 'cd /somewhere/ && tar cf - | gzip -c -' > local_backup_of_somewhere.tgz:: Dies wird falsch sein, da es am Ende "foobar" enthält ...)
Olivier Dulac
@OlivierDulac Guter Punkt, bearbeitet.
Heemayl
\ ssh 'ssh' und "ssh" entkommen nur einem Alias. Der Befehl ssh führt den Befehl aus (wobei sowohl der Alias ​​als auch die Funktion entkommen).
Olivier Dulac
@OlivierDulac Wusste das nicht, behoben.
Heemayl
Es ist so in Bash, kann vielleicht mit anderen Muscheln variieren ... aber jetzt, ich mag Ihre Antwort mit diesen Ergänzungen, erhalten Sie meine +1 ^^
Olivier Dulac