Se mailx
detectar uma mensagem não lida, ela entrará no modo interativo e aguardará o envio de comandos interativos para leitura, salvamento, resposta, etc.
Você pode redirecionar /dev/null
para mailx
para que ele saia imediatamente:
if mailx </dev/null | grep -q 'unread'; then
echo 'there is unread mail'
else
echo 'there is no unread mail'
fi
O comportamento disso pode depender da implementação exata de mailx
(difere um pouco entre Unices).