当命令在 ssh 会话中完成时在 OSX 上运行本地命令

当命令在 ssh 会话中完成时在 OSX 上运行本地命令

在我的 OS/X 笔记本电脑上,我可以输入“say done”,而我的 Mac 会说“done”。

在本地,我只会这样做:

do-something.sh && say done

这样我就可以在单独的窗口/桌面上随意操作直到脚本完成。

但现在我从我的 Mac SSH 到远程 Linux 机器。我想要的是能够告诉我的 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 主机 ssh 返回到您的 Mac 并运行该say命令。

答案4

ssh linux do-something.sh && say done

看起来就像您想要的那样。在远程主机和您的 Mac 之间实现某些通信似乎不可行。

如果您想运行更多命令,并且担心延迟、使用ControlMasterControlPersist选项(很多关于此的问题已经得到解答)。

相关内容