Apa itu Stderr?

Stderr, juga dikenal sebagai kesalahan standar, adalah deskriptor file default di mana suatu proses dapat menulis pesan kesalahan.

Dalam sistem operasi mirip Unix, seperti Linux, macOS X, dan BSD, stderr didefinisikan oleh standar POSIX. Nomor deskriptor file standarnya adalah 2 .

Di terminal, kesalahan standar default ke layar pengguna.

Stderr pada baris perintah Linux

Dalam bash, kesalahan standar dapat dialihkan pada baris perintah. Mengarahkan stderr dapat berguna jika Anda perlu menangkap pesan kesalahan apa pun ke file log terpisah, atau menyembunyikan pesan kesalahan sepenuhnya.

Sebagai contoh, pertimbangkan perintah find berikut:

 temukan / -iname '* sesuatu *' 
 / usr / share / doc / something / usr / share / doc / something / contoh / something_random find: `/ run / udisks2 ': Izin ditolak find:` / run / wpa_supplicant': Izin ditolak / usr / share / something / usr / game / sesuatu 

Kami mendapatkan kesalahan karena find sedang mencoba mencari beberapa direktori sistem yang tidak dapat kami baca. Baris yang mengatakan "Izin ditolak" adalah pesan kesalahan, dan ditulis ke stderr . Baris lain ditulis ke stdout (output standar). Secara default, keduanya ditampilkan di terminal.

Untuk menyembunyikan stderr, kita dapat mengarahkan mereka dengan merujuk nomor deskriptor file kesalahan standar, 2, dan operator "redirect output", > .

 find / -iname '* something *' 2> / dev / null 
 / usr / bagikan / doc / sesuatu / usr / bagikan / doc / sesuatu / contoh / something_random / usr / bagikan / sesuatu / usr / permainan / sesuatu 

Kesalahan tidak lagi ditampilkan, karena semua output ke stderr dialihkan ke / dev / null, perangkat khusus di Linux yang "tidak ke mana-mana."

Kami juga dapat mengalihkan semua kesalahan ke file:

 temukan / -iname '* something *' 2> output.txt 
 / usr / bagikan / doc / sesuatu / usr / bagikan / doc / sesuatu / contoh / something_random / usr / bagikan / sesuatu / usr / permainan / sesuatu 

Sekarang, jika Anda menambahkan konten output.txt, Anda akan melihat pesan kesalahan disimpan di sana:

 cat output.txt 
 find: `/ run / udisks2 ': Izin ditolak find:` / run / wpa_supplicant': Izin ditolak 

Untuk informasi terperinci tentang cara mengarahkan aliran data, lihat pengalihan di bash.

Pesan kesalahan, istilah Sistem Operasi