Eu apenas consertei quase exatamente a mesma situação. Espero que ainda ajude você, se não for o caso, talvez outros. Comecei pelo su, não pelo sudo, mas como o sudo pretende envolver um único outro comando, ele realmente deve retransmitir o código de saída do su. Caso contrário, você também pode aplicar a correção abaixo no nível do sudo.
Como você notou, o principal problema é que o comando executa com êxito. A ação padrão é relatar que foi concluída sem problemas e retornar o código de saída 0. Ele não "sabe" que um código de saída diferente de 0 de um comando foi inesperado ou que deve fazer algo com ele. Portanto, a solução é simplesmente fazer su retornar o código de saída do seu último comando. Isso fez por mim
su <user_x> -c '<bunch_of_commands>; exit $?'
Caso o sudo não tenha um bom desempenho, todo o comando deve ser algo assim (eu verificaria isso para você, mas não tenho o sudo instalado)
sudo 'su <user_x> -c \'<bunch_of_commands>; exit $?\'; exit$?'
Preste atenção ao aninhamento de aspas e certifique-se de $? não é expandido, portanto, não há aspas duplas.
Isso funciona nos shells Zsh / Bash / Bourne:
Não sei por que o código de retorno não está disponível quando você solicita em uma linha, mas está disponível quando você usa mais de uma linha para fazer a mesma coisa.
fonte
sudo su -m zero2cx -c "/bin/false &> /dev/null"
mas com o nome de usuário do seu sistema.$?
deve ser '1'.$ USER=appusername
conjunto que você desejar. Não use um nome de usuário real, use o pretendidoappusername
. Deveria funcionar, funciona para mim.