GNU/Linux >> Linux Esercitazione >  >> Linux

L'output del comando `tty` e il file `/dev/tty` si riferiscono entrambi al terminale di controllo dell'attuale processo Bash?

  1. Da man tty

    tty – stampa il nome del file del terminale collegato allo standard input

    $ tty
    /dev/pts/2
    
  2. Da APUE:

    Storicamente, il nome del terminale di controllo nella maggior parte delle versioni del sistema UNIX era /dev/tty . POSIX.1 fornisce una funzione
    runtime
    che possiamo chiamare per determinare il nome del terminale di controllo
    .

    #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
    

Quindi mi chiedevo se l'output del comando tty e il file /dev/tty entrambi si riferiscono al terminale di controllo dell'attuale processo bash?

Se sì, perché il comando tty genera un file slave pseudoterminale /dev/pts/2 , che è diverso da /dev/tty ?

Dal momento che l'emulatore di terminale lxterminal e la shell bash in esecuzione usa una coppia pseudoterminale, non è lo slave pseudoterminale /dev/pts/2 il terminale di controllo della shell bash?

/dev/tty e /dev/pts/2 non sono collegamenti simbolici tra loro, quindi sono file diversi?

Grazie.

Un post successivo quali sono le relazioni tra il mio attuale terminale di controllo e `/dev/tty`?

Risposta accettata:

Il comando tty (1) restituisce il nome del terminale collegato allo standard input. Questo potrebbe essere il terminale di controllo o potrebbe non esserlo. Il processo può anche avere un terminale di controllo, ma non è scritto sulla pietra che quel terminale deve essere collegato all'ingresso standard.

Dalla pagina di manuale di POSIX per tty (1):

L'utilità tty scrive sullo standard output il nome del terminale aperto come standard input. Il nome utilizzato deve essere equivalente alla stringa che verrebbe restituita da ttyname() funzione definita nel volume System Interfaces di POSIX.1‐2008.

Provalo tu stesso; corri

< /dev/null sh -c 'tty; sleep 10; echo "Done."'

e premi Ctrl+C dopo aver visto il messaggio "not a tty" scritto da tty perché lo standard input non è un (pseudo-)terminale.

D'altra parte, /dev/tty è sempre un sinonimo per il terminale di controllo di un processo, a condizione che il processo effettivamente abbia un terminale di controllo.


Linux
  1. Io reindirizzamento e il comando principale?

  2. Come elencare i descrittori di file aperti (e i file a cui si riferiscono) nella sessione corrente di Bash?

  3. Come posso ottenere la data e l'ora correnti nel terminale e impostare un comando personalizzato nel terminale per questo?

  4. Memorizza l'output del comando date e watch in un file

  5. Ciclo ricorsivo delle directory ed esecuzione di un comando su un file nella directory

Come salvare l'output del comando in un file utilizzando il terminale Linux

Cerca testo sull'output del terminale?

Salva l'output di un comando dal terminale Debian in un file

Come aggiungere l'output a un file?

L'output del comando reindirizza al file e al terminale

Come elencare i descrittori di file aperti (e i file a cui si riferiscono) nella mia attuale sessione bash