/ 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.