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.