A resposta FAILED aberta ou lida acontece quando o arquivo especificado no arquivo de soma de verificação md5 (md5sum.tmp no seu caso) não existe.
Por exemplo.
[user@localhost tmp]$ cd /tmp/testfolder
[user@localhost testfolder]$ touch dog
[user@localhost testfolder]$ md5sum dog > /tmp/md5sum.tmp
[user@localhost testfolder]$ md5sum -c /tmp/md5sum.tmp
dog: OK
[user@localhost testfolder]$ cd ..
[user@localhost tmp]$ md5sum -c /tmp/md5sum.tmp
md5sum: dog: No such file or directory
dog: FAILED open or read
md5sum: WARNING: 1 listed file could not be read
Note que eu acredito que o programa md5sum não olha para a entrada padrão quando passa a opção -c. Ele simplesmente observa as somas de verificação no arquivo especificado pela opção -c. Se eles existirem e o nome do arquivo corresponder, então ele compara e tudo fica feliz.
Embora provavelmente exista uma maneira melhor, armazenar o resultado de dois md5sums separados em uma variável e, em seguida, compará-los com uma instrução if é provavelmente a abordagem que eu tomaria.
Mais ou menos assim.
#!/bin/bash
firstfile='cat dog | md5sum '
# alternately could have used firstfile=$(md5sum < dog ) to ovoid UUOC
secondfile='cat mouse | md5sum '
if [ "$firstfile" == "$secondfile" ]; then
echo "They Match!"
else
echo "They Don't Match!"
fi