-
De
man tty
tty:imprime el nombre del archivo del terminal conectado a la entrada estándar
$ tty /dev/pts/2
-
Desde APUE:
Históricamente, el nombre de la terminal de control en la mayoría de las versiones del Sistema UNIX ha sido
/dev/tty
. POSIX.1 proporciona una función
de tiempo de ejecución
a la que podemos llamar para determinar el nombre del terminal de control
.#include <stdio.h> char *ctermid(char *ptr);
$ ls -la /dev/tty crw-rw-rw- 1 root tty 5, 0 May 26 00:16 /dev/tty
Entonces me preguntaba si la salida del comando tty
y el archivo /dev/tty
ambos se refieren a la terminal de control del proceso bash actual?
En caso afirmativo, ¿por qué el comando tty
generar un archivo esclavo pseudoterminal /dev/pts/2
, que es diferente de /dev/tty
?
Desde el emulador de terminal lxterminal
y el shell bash que se ejecuta en él usa un par de pseudoterminales, ¿no es el esclavo pseudoterminal /dev/pts/2
? el terminal de control de bash shell?
/dev/tty
y /dev/pts/2
no son enlaces simbólicos entre sí, ¿son archivos diferentes?
Gracias.
Una publicación de seguimiento ¿qué relaciones hay entre mi terminal de control actual y `/dev/tty`?
Respuesta aceptada:
El comando tty
(1) devuelve el nombre del terminal conectado a la entrada estándar. Este puede ser el terminal de control o puede no serlo. El proceso puede incluso tener una terminal de control, pero no está escrito en piedra que esa terminal deba estar conectada a una entrada estándar.
Desde la página del manual POSIX para tty
(1):
La utilidad tty escribirá en la salida estándar el nombre del terminal que está abierto como entrada estándar. El nombre que se utilice será equivalente a la cadena que devolvería ttyname()
función definida en el volumen Interfaces del sistema de POSIX.1‐2008.
Pruébelo usted mismo; correr
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
y presione Ctrl+C después de ver el mensaje "not a tty" escrito por tty
porque la entrada estándar no es un (pseudo) terminal.
Por otro lado, /dev/tty
es siempre un sinónimo de la terminal de control de un proceso, siempre que el proceso en realidad tiene una terminal de control.