Saya memiliki program ini di C
#include <stdio.h>
int main() {
char foo[10];
int i;
for(i = 0; i < 20 ; i++) {
foo[i] = 0;
}
return 0;
}
Jika saya menjalankan skrip ini
#!/bin/bash
gcc -O3 -o hello hello.c
if [ $? -eq 0 ]
then
echo -e "\033[1;32mcompilation sucess!\033[0m"
else
echo -e "\033[1;31mcompilation error!\033[0m"
fi
Ini akan menampilkan
hello.c: In function ‘main’:
hello.c:8:10: warning: iteration 10u invokes undefined behavior [-Waggressive-loop-optimizations]
foo[i] = 0;
^
hello.c:6:2: note: containing loop
for(i = 0; i<20 ;i++)
^
compilation sucess!
Itu karena gcc tidak menganggap itu sebagai kesalahan tetapi tetap menampilkan peringatan tersebut stderr.
Tapi saya masih ingin mendeteksi itu dalam skrip bash.

Selamat datang di Pengguna Super. Jika pertanyaan Anda adalah tentang pemrograman / coding, mohon posting di Stack Overflow.
—
Arun Vinoth
@ArunVinoth Pertanyaannya masih pada topik di sini, karena ini tentang menggunakan alat pemrograman dan interaksinya dengan skrip panggilan.
—
DavidPostill
@KamilMaciorowski Tidak juga, karena jawaban atas pertanyaan yang diajukan dalam judul juga akan menyelesaikan pertanyaan OP (bahkan itu bukan jawaban terbaik).
—
DavidPostill
saya masih ingin tahu bagaimana mendeteksi jika perintah telah dicetak ke stderr, itu akan jauh lebih baik daripada awnser yang diterima
—
gabriel80546
Saya pikir jawaban @ DavidPostill adalah yang benar, tetapi jika Anda ingin mempertahankan perbedaan antara peringatan dan kesalahan, serta mendeteksi catatan, Anda dapat menambahkan `2> err` di akhir
—
AFH
gccperintah dan melakukan pengujian Anda if [ $? -eq 0 -a ! -s err ].