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
gcc
perintah dan melakukan pengujian Anda if [ $? -eq 0 -a ! -s err ]
.