在我的 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 之间实现某些通信似乎不可行。
如果您想运行更多命令,并且担心延迟、使用ControlMaster
和ControlPersist
选项(很多关于此的问题已经得到解答)。