En mi computadora portátil OS/X, puedo escribir "decir hecho" y mi Mac dice "hecho".
Localmente, simplemente haría:
do-something.sh && say done
Y eso me permite jugar en ventanas/escritorios separados hasta que finalice el script.
Pero ahora hago ssh desde mi Mac a una máquina Linux remota. Lo que quiero es poder decirle a mi Mac que ejecute "decir hecho" cuando finalice un comando específico. ¿Alguna buena forma de hacerlo?
Respuesta1
Un saludo a un compañero de trabajo, A Golden, a quien se le ocurrió esto de inmediato. Este es un corta y pega de su respuesta, que funciona y lo concreta por completo.
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! :-)
Respuesta2
En tu Mac, inicia un servidor TCP que enviará todo lo que reciba a say
:
mac $ while true; do nc -l 1234 | say; done
Luego, cuando uses SSH, úsalo -R
para reenviar el puerto 1234 a tu servidor:
mac $ ssh -R 1234:localhost:1234 linux
Ahora su servidor Linux debería tener un túnel hacia el servidor nc en su Mac y puede usarlo nc
para enviarle texto:
linux $ echo done | nc localhost 1234
Respuesta3
Necesitarás un servidor ssh en tu mac. Entonces puedes hacer lo siguiente:
[you@mac]$ ssh linux
[you@linux]$ interactive_cmd; ssh mac say done
Usted inicia sesión en su host de Linux, ejecuta el comando, cuando termina, el host de Linux regresa a su Mac y ejecuta el say
comando.
Respuesta4
ssh linux do-something.sh && say done
parece hacer lo que quieres. Implementar alguna comunicación entre el host remoto y su Mac no parece factible.
Si desea ejecutar más comandos y le preocupa la latencia, el uso ControlMaster
y ControlPersist
las opciones (muchas preguntas al respecto ya han sido respondidas).