Deteksi jika perintah telah dicetak ke stderr


2

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.

tangkapan layar


Selamat datang di Pengguna Super. Jika pertanyaan Anda adalah tentang pemrograman / coding, mohon posting di Stack Overflow.
Arun Vinoth

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

Jawaban:


2

Saya pikir jawaban @ DavidPostill adalah yang benar, tetapi jika Anda ingin mempertahankan perbedaan antara peringatan dan kesalahan, serta mendeteksi catatan, Anda dapat menambahkan 2>errke akhir gccperintah:

gcc -O3 -o hello hello.c

Kemudian lakukan tes Anda:

if [ $? -eq 0 -a ! -s err ]

baik jawaban Anda adalah apa yang saya benar-benar inginkan dan itu sangat membantu, ya Anda benar cara saya membuat pertanyaan saya tampaknya saya benar-benar ingin membuat deteksi dalam hal itu, tetapi deteksi dalam hal apapun itu jauh lebih baik.
gabriel80546

karena kode yang saya buat hanya untuk menggambarkan masalah. itu sebenarnya bukan kode nyata yang melakukan 'hal yang sangat berguna'
gabriel80546

4

gcc tidak menganggap itu sebagai kesalahan

Anda dapat menggunakan -Werrorsakelar.

-Werror Jadikan semua peringatan sebagai kesalahan.

Pilihan Peringatan Sumber - Menggunakan GNU Compiler Collection (GCC)


Meskipun itu hanya trik yang bisa saya gunakan dengan perintah gcc ini, tetapi apa yang saya inginkan adalah sesuatu yang akan membantu saya dengan perintah apa pun.
gabriel80546

@ gabriel80546 Maka Anda telah menanyakan hal itu dalam pertanyaan Anda. Tetapi Anda tidak boleh mengubah pertanyaan Anda sekarang karena itu akan membatalkan jawaban yang ada.
DavidPostill

1
Saya pikir judulnya jelas
gabriel80546
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.