/ dev / tty: no existe tal dispositivo o dirección, solo en un script


6

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?


los -t opción debería He resuelto esto. Intenta poner set -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.
— Barmar

Sé lo que está haciendo, ese no es el problema. Está intentando enviar salida a / dev / tty. El problema es que reclama que el dispositivo no existe
— Brydon Gibson

Yo sé eso. Espero que veas algo antes de eso que explica cómo se está desconectando de la terminal.
— Barmar

Ah, veo lo que quieres decir, voy a darle una oportunidad
— Brydon Gibson

Si aún tiene problemas, edite su pregunta para incluir las partes relevantes de este script.
— Kenster

Respuestas:


2

Tratar -tt Para ver si funciona.

De la página del manual de ssh,

Multiple -t options force tty allocation, even if ssh has no local tty.


Editado el post - esto falló con otro error [relacionado]
— Brydon Gibson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.