Ich habe fast genau dieselbe Situation behoben. Hoffe es hilft dir trotzdem, wenn nicht dann vielleicht anderen. Ich habe von su angefangen, nicht von sudo, aber da sudo einen einzigen anderen Befehl einwickeln soll, sollte es wirklich den Exit-Code von su weiterleiten. Wenn nicht, können Sie den folgenden Fix auch auf der Sudo-Ebene anwenden.
Wie Sie bemerkt haben, ist das Hauptproblem, dass su seinen Befehl erfolgreich ausführt. Die Standardaktion ist dann, zu melden, dass sie ohne Probleme abgeschlossen wurde, und gibt den Exit-Code 0 zurück. Sie "weiß" nicht, dass ein Exit-Code eines Befehls, der nicht 0 ist, unerwartet war oder dass er etwas damit tun sollte. Die Lösung besteht also ganz einfach darin, dass su den Exit-Code des letzten Befehls zurückgibt. Das hat es für mich getan
su <user_x> -c '<bunch_of_commands>; exit $?'
Falls sudo nicht nett ist, sollte der gesamte Befehl so aussehen (ich würde das für Sie überprüfen, aber ich habe kein sudo installiert)
sudo 'su <user_x> -c \'<bunch_of_commands>; exit $?\'; exit$?'
Achten Sie auf die Verschachtelung von Anführungszeichen und stellen Sie sicher, dass $? wird nicht erweitert, also keine Anführungszeichen.