回答:
ほぼ同じ状況を修正しました。それでもおそらくそれが他の人ではないとしても、それがあなたを助けることを願っています。私はsudoではなくsuから始めましたが、sudoは他の1つのコマンドをラップすることを目的としているため、実際にはsuの終了コードを中継する必要があります。そうでない場合は、sudoレベルでも以下の修正を適用できます。
あなたが指摘したように、主な問題はsuがそのコマンドを正常に実行することです。デフォルトのアクションは、問題なく完了したことを報告することであり、終了コード0を返します。コマンドからの0以外の終了コードが予期しないものであったことや、コマンドで何かを実行する必要があることは「わかりません」。したがって、解決策は、suが最後のコマンドの終了コードを返すようにすることです。これは私のためにそれをしました
su <user_x> -c '<bunch_of_commands>; exit $?'
sudoがうまく機能しない場合、コマンド全体は次のようになります(これを確認しますが、sudoをインストールしていません)。
sudo 'su <user_x> -c \'<bunch_of_commands>; exit $?\'; exit$?'
引用符のネストに注意して、$を確認してください。展開されないため、二重引用符はありません。
これはZsh / Bash / Bourneシェルで動作します:
$ sudo su -m $USER -c "$BASE/bin/shutdown.sh &> /dev/null"
$ echo $?
1行で要求したときに戻りコードが利用できない理由はわかりませんが、複数の行を使用して同じことを行うときに利用できます。
sudo su -m zero2cx -c "/bin/false &> /dev/null"
システムのユーザー名で試してください。$?
「1」でなければなりません。
$ USER=appusername
希望どおりにsetで動作するはずです。実際のユーザー名を使用しないでくださいappusername
。意図したものを使用してください。それはうまくいくはずです、私にとってはうまくいきます。