Ich habe gerade fast genau die gleiche Situation behoben. Hoffe es hilft dir noch, wenn nicht dann vielleicht anderen. Ich habe mit su angefangen, nicht mit sudo, aber da sudo einen einzelnen anderen Befehl umschließen 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 bereits bemerkt haben, besteht das Hauptproblem darin, dass su den Befehl erfolgreich ausführt. Die Standardaktion besteht dann darin, zu melden, dass der Vorgang ohne Probleme abgeschlossen wurde, und daher den Exit-Code 0 zurückzugeben. Er "weiß" nicht, dass ein Exit-Code ungleich 0 aus einem Befehl unerwartet war oder dass er etwas damit tun sollte. Daher besteht die Lösung ganz einfach darin, su den Exit-Code seines letzten Befehls zurückgeben zu lassen. Das hat es für mich getan
su <user_x> -c '<bunch_of_commands>; exit $?'
Falls sudo nicht gut spielt, sollte der gesamte Befehl ungefähr so aussehen (ich würde dies für Sie überprüfen, aber ich habe sudo nicht 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 doppelten Anführungszeichen.