¿Cuál es la mejor manera de escribir una función de contenedor que ejecuta comandos y registra su código de salida?

Actualmente utilizo esta función para envolver los comandos de ejecución y registrar su ejecución, y el código de retorno, y salir en caso de un código de retorno distinto de cero.

Sin embargo, esto es problemático, ya que aparentemente hace doble interpolación, haciendo que los comandos con comillas simples o dobles rompan el guión.

¿Me puede recomendar una mejor manera?

Aquí está la función:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta