Estoy sacando mi pelo sobre esto. He revisado todos los resultados de Google para / dev / tty: no existe tal dispositivo o dirección, ninguno se aplica a lo que estoy haciendo / ninguna de las soluciones tiene éxito
Tengo un script que se guarda en otra máquina (usando claves públicas) y se ejecuta solo (con diferentes parámetros, no se reproduce en bucle). Llame a este rpmInstallScript.bash
En un punto del script, ejecuta rpm -ivh para instalar algunos paquetes RPM. Durante la instalación de uno de estos paquetes, se coloca un archivo en / var / tmp llamado rpm-tmp. [6 caracteres aleatorios]
Este archivo es un script, y creo que se ejecuta en algún momento durante la instalación de rpm.
En el guión, hay múltiples apariciones de
echo [something] > /dev/tty
o
echo [something] | tee [something] > /dev/tty.
Todas estas apariciones fallan con / dev / tty: no existe tal dispositivo o dirección. Si ssh en la máquina de forma manual y ya sea un paquete de rpm, ejecutar el script rpm-tmp o ejecutar rpmInstallscript.bash, funciona bien.
Me estoy conectando a la máquina remota con ssh -t, por lo tanto, debería haber un tty, ¿correcto?
No veo por qué esto no funciona, especialmente porque hacerlo manualmente, incluso sin la opción -t, funciona bien. Lo único en lo que puedo pensar es que no es una sesión interactiva, pero / dev / tty todavía debería existir, ¿correcto?
Editar - el error resulta de:
ssh -t root@[machine] -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <<DONE
./rpmInstallScript.bash
donde rpmInstallScript.bash ejecuta rpm -ivh, el script resultante colocado en / var / tmp usa & gt; / dev / tty - esto es lo que falla
Editar de nuevo: usando -tt da:
tcgetattr: Inappropriate ioctl for device
Solo cuando se ejecuta desde un script: ejecutar ssh -tt manualmente y luego echo test & gt; / dev / tty funciona bien
Solo puedo asumir que esto es un fracaso para forzar-crear un tty.
¿Hay alguna otra manera de 'generar' un tty? ¿Puedo falsificarlo haciendo un archivo llamado / dev / tty?
-t
opción debería He resuelto esto. Intenta ponerset -x
al comienzo de la secuencia de comandos, para que pueda ver todas las cosas que hace. Tal vez algo está comprobando una variable de entorno como$TERM
y desconectar de la terminal cuando esto no está configurado.