Saya baru saja memperbaiki situasi yang hampir persis sama. Semoga masih bisa membantu Anda, jika tidak maka mungkin orang lain. Saya mulai dari su, bukan sudo, tetapi karena sudo dimaksudkan untuk membungkus satu perintah lain, itu benar-benar harus menyampaikan kode keluar su. Jika tidak, Anda dapat menerapkan perbaikan di bawah ini pada level sudo juga.
Seperti yang Anda perhatikan, masalah utamanya adalah su berhasil mengeksekusi perintahnya. Tindakan default adalah untuk melaporkan bahwa itu selesai tanpa masalah dan karenanya mengembalikan kode keluar 0. Tidak "tahu" bahwa kode keluar 0 dari suatu perintah tidak terduga, atau bahwa ia harus melakukan sesuatu dengan itu. Jadi solusinya cukup sederhana untuk membuat su mengembalikan kode keluar dari perintah terakhirnya. Ini berhasil untukku
su <user_x> -c '<bunch_of_commands>; exit $?'
Dalam hal sudo tidak bermain bagus, seluruh perintah harus seperti ini (saya akan memeriksa ini untuk Anda tetapi saya tidak menginstal sudo)
sudo 'su <user_x> -c \'<bunch_of_commands>; exit $?\'; exit$?'
Perhatikan nesting kutipan dan pastikan $? tidak diperluas, jadi tidak ada tanda kutip ganda.