A saída do comando 'tty' e o arquivo '/ dev / tty' referem-se ao terminal de controle do processo bash atual?

1
  1. De man tty

    tty - print the file name of the terminal connected to standard input

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

    Historically, the name of the controlling terminal in most versions of the UNIX System has been /dev/tty. POSIX.1 provides a runtime function that we can call to determine the name of the controlling terminal.

    #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
    

Então eu queria saber se a saída do comando tty e o arquivo /dev/tty se referem ao terminal de controle do atual processo bash?

Se sim, por que o comando tty exibe um arquivo escravo pseudoterminal /dev/pts/2 , que é diferente de /dev/tty ?

Como o emulador de terminal lxterminal e o shell bash em execução nele usam um par pseudo-terminal, o pseudoterminal slave /dev/pts/2 não é o terminal de controle do shell bash?

/dev/tty e /dev/pts/2 não são links simbólicos um para o outro, então são arquivos diferentes?

Obrigado.

Uma postagem de acompanhamento as relações estão entre o meu terminal de controle atual e '/ dev / tty'?

    
por Tim 26.05.2018 / 15:08

2 respostas

3

O comando tty (1) retorna o nome do terminal conectado à entrada padrão. Este pode ser o terminal de controle ou pode não ser. O processo pode até ter um terminal de controle, mas não está escrito em pedra que esse terminal deve estar conectado à entrada padrão.

Na página de manual do POSIX para tty (1) :

The tty utility shall write to the standard output the name of the terminal that is open as standard input. The name that is used shall be equivalent to the string that would be returned by the ttyname() function defined in the System Interfaces volume of POSIX.1‐2008.

Tente por si mesmo; correr

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

e pressione Ctrl + C depois de ver a mensagem "not a tty" escrita por tty porque a entrada padrão não é um terminal (pseudo).

Por outro lado, /dev/tty é sempre um synonim para o terminal de controle de um processo, desde que o processo realmente possua um terminal de controle.

    
por 26.05.2018 / 15:18
2

Do the output of command tty and the file /dev/tty both refer to the controlling terminal of the current process?

Bem, não, eles não são iguais. tty exibe o nome do tty conectado à entrada padrão . Isso não é necessariamente o mesmo que o terminal de controle (ao qual /dev/tty se refere) .

$ tty
/dev/pts/12
$ tty < /dev/pts/1
/dev/pts/1
$ tty < /dev/null
not a tty

Claro, geralmente se você tem stdin conectado a um terminal, é o terminal de controle.

O caso de uso para tty que eu vi é determinar se um script está sendo executado de forma interativa ou não. Para esse uso, a verificação de stdin em vez do terminal de controle permite detectar situações em que o stdin está conectado a algo diferente de um terminal e em que o usuário não pode fornecer entrada interativa. Por exemplo. executando maybe_interactive.sh < some_input_file de um shell interativo.

/dev/tty and /dev/pts/2 aren't symlinks to one another, so are they different files?

/dev/tty não pode ser um link simbólico já que o terminal de controle é diferente para processos diferentes, e os links simbólicos são os mesmos para todos os processos.

    
por 26.05.2018 / 15:25

Tags