GNU/Linux >> Tutoriales Linux >  >> Linux

¿La salida del comando `tty` y el archivo `/dev/tty` se refieren ambos a la terminal de control del proceso Bash actual?

  1. De man tty

    tty:imprime el nombre del archivo del terminal conectado a la entrada estándar

    $ tty
    /dev/pts/2
    
  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.


Linux
  1. Lea y escriba datos desde cualquier lugar con redirección en la terminal de Linux

  2. Cómo capturar sesiones de terminal y salida con el comando de script de Linux

  3. ¿Qué relaciones hay entre el terminal de control actual y `/dev/tty`?

  4. ¿Evitar que un comando envíe Stdout y Stderr a cualquier terminal o archivo?

  5. Redirección de salida de comando a archivo y terminal

Cómo guardar la salida del comando en un archivo usando la terminal de Linux

¿Buscar texto en la salida del terminal?

¿Redireccionamiento de Io y el comando principal?

¿Cómo enumerar los descriptores de archivos abiertos (y los archivos a los que se refieren) en la sesión actual de Bash?

Guardar la salida de un comando desde la terminal de Debian a un archivo

Cómo enumerar los descriptores de archivos abiertos (y los archivos a los que se refieren) en mi sesión bash actual