Acabo de arreglar casi exactamente la misma situación. Espero que todavía te ayude, si no, quizás a otros Empecé desde su, no sudo, pero dado que sudo está destinado a envolver un solo comando, realmente debería transmitir el código de salida de su. Si no, también puede aplicar la corrección a continuación en el nivel de sudo.
Como notó, el problema principal es que su ejecuta con éxito su comando. La acción predeterminada es informar que se completó sin problemas y, por lo tanto, devuelve el código de salida 0. No "sabe" que un código de salida que no sea 0 de un comando fue inesperado, o que debería hacer algo con él. Por lo tanto, la solución es simplemente hacer que su devuelva el código de salida de su último comando. Esto lo hizo por mi
su <user_x> -c '<bunch_of_commands>; exit $?'
En caso de que sudo no juegue bien, todo el comando debería ser algo como esto (lo comprobaría por usted pero no tengo sudo instalado)
sudo 'su <user_x> -c \'<bunch_of_commands>; exit $?\'; exit$?'
Esté atento a la anidación de comillas y asegúrese de $? no se expande, por lo que no hay comillas dobles.