Qual é a melhor maneira de escrever uma função de wrapper que executa comandos e registra seu código de saída

Atualmente, uso essa função para agrupar comandos de execução e registrar sua execução, código de retorno e saída no caso de um código de retorno diferente de zero.

No entanto, isso é problemático como aparentemente, ele faz dupla interpolação, fazendo com que comandos com aspas simples ou duplas quebrem o script.

Você pode recomendar uma maneira melhor?

Aqui está a função:

do_cmd()
{
    eval $*
    if [[ $? -eq 0 ]]
    then
        echo "Successfully ran [ $1 ]"
    else
        echo "Error: Command [ $1 ] returned $?"
        exit $?
    fi
}

questionAnswers(2)

yourAnswerToTheQuestion