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.