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.
Dies funktioniert in Zsh / Bash / Bourne-Shells:
Ich bin nicht sicher, warum der Rückkehrcode nicht verfügbar ist, wenn Sie in einem Einzeiler danach fragen, aber er ist verfügbar, wenn Sie mehr als eine Zeile verwenden, um dasselbe zu tun.
quelle
sudo su -m zero2cx -c "/bin/false &> /dev/null"
aber mit Ihrem Systembenutzernamen.$?
sollte '1' sein.$ USER=appusername
Set funktionieren , wie Sie es wünschen. Verwenden Sie keinen echten Benutzernamen, sondern verwenden Sie Ihren beabsichtigten Benutzernamenappusername
. Es sollte funktionieren, das tut es für mich.