Запуск локальных команд на OSX после завершения команды в сеансе ssh

Запуск локальных команд на OSX после завершения команды в сеансе ssh

На моем ноутбуке с OS/X я могу набрать «say done», и мой Mac скажет «done».

На местном уровне я бы просто сделал:

do-something.sh && say done

И это позволяет мне работать в отдельных окнах/рабочих столах, пока скрипт не завершится.

Но теперь я подключаюсь по ssh со своего mac к удаленной машине 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 должен иметь туннель к серверу nc на вашем Mac и может использовать его ncдля отправки на него текста:

linux $ echo done | nc localhost 1234

решение3

вам понадобится ssh-сервер на вашем mac. Тогда вы можете сделать следующее:

[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(на многие вопросы по этому поводу уже даны ответы).

Связанный контент