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.
Capitán Codificador
fuente
Esto funciona en Zsh / Bash / Bourne shells:
No estoy seguro de por qué el código de retorno no está disponible cuando lo solicita de una sola línea, pero está disponible cuando usa más de una línea para hacer lo mismo.
fuente
sudo su -m zero2cx -c "/bin/false &> /dev/null"
pero con su nombre de usuario del sistema.$?
debería ser '1'.$ USER=appusername
conjunto que desees. No use un nombre de usuario real, insread use su intenciónappusername
. Debería funcionar, lo hace para mí.