
Quería ejecutar un comando en un shell remoto en su entorno interactivo, para que cargara mi control remoto .bash_profile
allí primero antes de ejecutar el comando.
Esto funciona muy bien:
echo "command" | ssh user@remote_host
[1]
Pero da error
El pseudoterminal no se asignará porque la entrada estándar no es un terminal.
No sé si esto es un problema porque el comando anterior funciona muy bien para mi propósito, pero aun así busqué una solución para que desapareciera y encontré
ssh -t -t
[2]
Combinándolos obtienes echo "command" | ssh -tt user@remote_host
lo que funciona muy bien.
Pero por alguna extraña razón en Git bash, después de regresar de ejecutar el comando, no puedo escribir más. Lo probé en Cygwin, donde funciona muy bien, por lo que solo Git bash tiene este problema.
Intenté escribir exit
en caso de que todavía estuviera atrapado de manera invisible en ese shell remoto, pero nada funciona.
¿Alguna idea de cuál podría ser el problema al hacer ssh -tt
en Git bash?
Respuesta1
El mensaje "No se asignará el pseudoterminal" es solo informativo. Si el comando que está ejecutando no necesita una terminal, sería mejor que ejecute ssh con la -T
opción de deshabilitar la asignación de PTY y cerrar el mensaje.
Parece que su TTY local se está quedando en un estado extraño por alguna razón. La ejecución stty sane
debería restablecer el terminal a un estado utilizable. Sé que dijiste que no puedes escribir, pero puedes intentar hacer esto:
- Escriba Control-Q (es decir, mantenga presionada la tecla "Control" y presione "Q") para cancelar cualquier suspensión Ctrl-S/Ctrl-Q que pueda estar vigente.
- Escriba Control-J. Este es un carácter de nueva línea literal para garantizar que el shell esté listo para leer una nueva línea de comando.
- escribe "stty cuerdo" y luego Control-J nuevamente. Pruébalo incluso si lo que escribes no aparece en la pantalla.
Si eso no funciona, la opción nuclear sería ejecutar "muy cuerdo" en el TTY atascado desde otra terminal.
- Abra otra ventana de terminal.
- Utilice "ps" para averiguar en qué PTY se encuentra la sesión bloqueada.
- Ejecutar
stty sane
con entrada redirigida desde el PTY.
Por ejemplo, en Linux:
$ ps -fu jdoe
...
jdoe 2083 2080 0 22:17 pts/0 00:00:00 /bin/bash <-- TTY is "/dev/pts/0"
$ stty sane < /dev/pts/0