Uma função para salvar o valor de retorno de um comando não é tão complicada:
f() {
some-command-that-can-fail
retval=$?
if [ "$retval" != 0 ] ; then
echo the command failed
fi
return $retval
}
Se você não se importa com o valor de retorno exato, mas quer apenas um código de retorno diferente de zero, isso funcionaria:
somecmd || ( echo it failed ; false )
Você precisa do subshell (ou de um bloco composto) para executar somente o false
final se o comando original falhar.