O teste de strace write
e strace mesg
revela uma pequena diferença em como eles identificam seu tty.
write
primeiro fará readlink("/proc/self/fd/0", ...)
para encontrar o nome do tty
e, em seguida, fará uma chamada stat
no caminho resultante.
mesg
, por outro lado, chamará fstat(1, ...)
, que pula a etapa de usar readlink
e não depende do sistema de arquivos /proc
.
Observe que eles também analisam diferentes descritores de arquivos 0
vs 1
. Normalmente, um shell interativo terá descritores de arquivo 0
, 1
e 2
todos referenciando o mesmo tty. Se, de alguma forma, você tiver executado o shell com 0
e 1
referenciando algo diferente, por exemplo, se você redirecionou um deles, isso poderia explicar a discrepância entre a saída de mesg
e write
.
Se os descritores de arquivo referenciam o mesmo tty, outro motivo possível para a discrepância pode ser que seu /proc
mount não está se comportando como esperado ou o inode do dispositivo de caractere para o seu tty foi substituído.