sshの終了後にコマンドを自動的に実行する方法


10

ssh接続を終了した後、ローカル端末でコマンドを自動的に実行するにはどうすればよいですか?このために処理できるフックまたはイベントはありますか?

回答:


13

alias以上の機能を活用します。

例えば:

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

これで、以下を実行できます。

ssh mysite

sshセッションを終了echo foobarすると、が実行されます。

echo foobar実行する必要がある実際のコマンドで変更します。もちろん、必要に応じて複数のコマンドを追加できます。

関数定義を永続化するには、それをに入れます~/.bashrc


また、ssh明示的に外部を使用する場合、関数に名前を付けることが常に望ましいとは限らないことに注意してくださいssh。その場合、次のいずれかを使用して、ssh関数をスキップして外部sshバイナリを取得できます。

command ssh mysite

または、関数を別の名前に変更します。例sshfunc

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

4
注:関数の名前を「ssh」以外の名前に変更することをお勧めします。これにより、sshを元の意味に保つことができます...多分:ssh2?またはsshcmd?(そうでなければ、次のようなことをすると、その副作用を忘れる可能性がありますssh user@host 'cd /somewhere/ && tar cf - | gzip -c -' > local_backup_of_somewhere.tgz::最後に「foobar」が含まれるため、これは間違っています...)
Olivier Dulac

@OlivierDulac良い点、編集。
heemayl 2016年

\ ssh 'ssh'および "ssh"はエイリアスのみをエスケープします。コマンドsshはコマンドを実行します(エイリアスと関数の両方をエスケープします)。
Olivier Dulac 2016年

@OlivierDulacそれを知らなかった、修正済み。
heemayl

それはbashのようなもので、他のシェルによって異なる場合があります...しかし、今、私はそれらの追加であなたの答えが好きです、あなたは私の+1を取得します^^
Olivier Dulac
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.