SSHセッションでコマンドが完了したときにOSXでローカルコマンドを実行する

SSHセッションでコマンドが完了したときにOSXでローカルコマンドを実行する

OS/X ラップトップで「say done」と入力すると、Mac では「done」と表示されます。

ローカルでは、次のようにします。

do-something.sh && say done

これにより、スクリプトが終了するまで、別のウィンドウ/デスクトップで操作できるようになります。

しかし、今は Mac からリモート Linux マシンに SSH 接続しています。私が望んでいるのは、特定のコマンドが終了したときに Mac に「say done」を実行するように指示することです。それを実現する良い方法はありますか?

答え1

これをすぐに思いついた同僚の A Golden に感謝します。これは彼らの返答をコピーして貼り付けたものですが、うまく機能し、この問題を完全に解決しています。

I picked "say-hi-locally" and set it up on my linux server as:
alias say-hi-locally="echo EMIT SAY HI"

Then, since I use ITerm2 as my local terminal, I set up a trigger in ITerm2 with the regexp "EMIT SAY HI" and told that to run the local command "say hi"

Now I can do:
do-something.sh; say-hi-locally

and when it finishes it will echo "EMIT SAY HI" which ITerm2 will then pick up and then my computer says "hi" to me! :-)

答え2

Mac で、受信したすべてのデータを次の宛先に送信する TCP サーバーを起動しますsay

mac $ while true; do nc -l 1234 | say; done

次に、SSH を使用するときは、-Rポート 1234 をサーバーに転送します。

mac $ ssh -R 1234:localhost:1234 linux

これで、Linux サーバーは Mac 上の nc サーバーへのトンネルを持つようになり、を使用してncテキストを送信できるようになります。

linux $ echo done | nc localhost 1234

答え3

Mac に SSH サーバーが必要です。その後、次の操作を実行できます。

[you@mac]$ ssh linux
[you@linux]$ interactive_cmd; ssh mac say done

Linux ホストにログインしてコマンドを実行すると、完了すると Linux ホストが Mac に SSH で戻り、sayコマンドを実行します。

答え4

ssh linux do-something.sh && say done

希望どおりのようです。リモート ホストと Mac 間の通信を実装することは実現可能ではないようです。

さらに多くのコマンドを実行し、遅延が心配な場合は、ControlMasterおよびControlPersistオプションを使用します (これに関する多くの質問は既に回答されています)。

関連情報