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