Apa itu stdin, stderr dan stdout di Bash

What Are Stdin Stderr



Setiap kali menjalankan perintah apa pun di terminal, stdin , stderr , dan stdout adalah tiga aliran data yang dibuat bash. Jika Anda terbiasa dengan baris perintah, Anda mungkin sudah memanfaatkan fitur-fitur ini. Pada dasarnya, mereka memungkinkan pemipaan/pengalihan data dari satu perintah ke perintah lainnya.

Yuk simak caranya stdin , stderr , dan stdout bekerja dan bagaimana Anda dapat menggunakannya juga.







stdin, stdout dan stderr

Dalam komputasi, istilah aliran mengacu pada sesuatu yang dapat mentransfer data. Di sini, ketiga aliran membawa teks sebagai data.



Mirip dengan aliran air, aliran data juga memiliki dua titik akhir. Ada sumber dan aliran keluar. Perintah apa pun yang Anda jalankan di terminal akan berada di kedua titik aliran. Dengan menggunakan aliran, Anda dapat menghubungkan dua jendela terminal, dua perintah berbeda, dan bahkan file!



Mari kita perincian aliran khusus dengan cepat.





  • stdin: Singkatan dari input standar. Dibutuhkan teks sebagai input.
  • stdout: Singkatan dari keluaran standar. Output teks dari suatu perintah disimpan dalam aliran stdout.
  • stderr: Singkatan dari kesalahan standar. Setiap kali perintah menghadapi kesalahan, pesan kesalahan disimpan dalam aliran ini.

Di Linux, hampir semua aliran diperlakukan seolah-olah itu adalah file. Sama seperti Anda dapat membaca/menulis file, Anda dapat membaca/menulis data dari aliran ini.

Cara mudah untuk mengakses file apa pun adalah dengan menggunakan nomor deskriptor file unik yang terkait dengannya. Dalam kasus aliran ini, ada nilai unik yang ditetapkan untuk masing-masing aliran tersebut.



  • 0: stdin
  • 1: stdout
  • 2: stderr

stdin, stdout, dan stderr beraksi

Mari kita mulai dengan mempelajari lebih lanjut tentang aliran ini melalui tindakan, kita akan mulai dengan stdin.

Jalankan perintah berikut.

$Baca

Perintah akan membutuhkan input dari keyboard. Di sini, alat baca mendapatkan input dari stdin. Sekarang mari kita lihat stdout.

Jalankan perintah terlebih dahulu.

$ls -NS

Di sini, perintah ls mencantumkan file di direktori saat ini. Daftar dikirim ke stdout dan terminal mencetaknya. Mari kita periksa stderr sekarang.

Ada berbagai cara kesalahan dapat terjadi. Untuk contoh ini, mengirimkan ls argumen yang tidak valid akan menghasilkan kesalahan.

$ls -NSapa pun

Di sini, tidak ada file bernama apa pun. Itu sebabnya pesan yang dikembalikan ls dikirim ke stderr .

Perpipaan

Ini adalah teknik umum yang memanfaatkan sepenuhnya aliran stdin dan stdout. Mari kita jelaskan dengan sebuah contoh.

$dibuang 'Halo Dunia' | peganganHalo

Di sini, | tanda bertanggung jawab untuk pemipaan. Hasil dibuang menghasilkan ditulis dalam stdout sungai kecil. Kemudian, perpipaan mengarahkan ulang konten stdout ke stdin untuk perintah grep. Begitulah cara grep mengetahui konten untuk melakukan operasi.

Jika Anda ingin menyalurkan stderr dan stdout ke perintah berikutnya, gunakan |& sebagai gantinya.

$dibuangHalo Dunia| & kucing

$apa pun| & kucing

Mengarahkan aliran

Sekarang kita tahu cara kerja aliran ini, mari kita lihat bagaimana Anda dapat mengarahkannya kembali. Pemipaan adalah bentuk pengalihan. Namun, itu hanya melibatkan stdin dan stdout. Bash memungkinkan kontrol khusus atas ketiga aliran.

Untuk mengarahkan ulang konten stdout ke file, tambahkan > sudut diikuti dengan nama file target.

$dibuangHalo Dunia>halo.txt

Di sini, output dari perintah echo akan disimpan dalam file hello.txt.

Jika file memang sudah ada, maka perintah di atas akan menimpanya. Untuk menghindarinya, pastikan nama filenya unik. Jika Anda tidak ingin menimpa, Anda mungkin ingin menggunakan >> sebagai gantinya. Itu menambahkan output di akhir file target.

$dibuang 'Halo Dunia' >>halo.txt

Tujuan stdin adalah bekerja dengan input. Ini juga dapat diarahkan. Misalnya, alih-alih mengetik input dari keyboard, input dapat dimuat dari file.

Dalam perintah ini, cat akan mengambil inputnya langsung dari file hello.txt.

$kucing <halo.txt

Mari kita periksa pengalihan dengan contoh yang berbeda. Kali ini, akan melibatkan skrip Python.

$# pyin.py
$ nama= memasukkan('Masukkan nama ')
$surel = memasukkan('Masukan email ')
$mencetak('Nama Anda %s dan email %s'%(nama, surel))

Input untuk skrip terletak di hello.txt.

$kucinghalo.txt

Mari kita mengirim file sebagai input untuk skrip.

$ python3 pyin.py <Halo.txt

Menariknya, Anda dapat mengarahkan keduanya stdin dan stdout di baris perintah yang sama. Di sini, perintah berikut akan menggunakan hello.txt sebagai stdin dan kirim stdout dari perintah ke file.

$ python3 pyin.py <Halo.txt >keluaran.txt

Mengarahkan stderr mirip dengan stdout. Namun, Anda perlu menyebutkan deskripsi ID 2 untuk menunjukkan stderr. Jika tidak, itu hanya akan menggunakan stdout.

Di sini, saya akan mengarahkan ulang konten stderr ke file teks.

$apa pun2>error.txt

Mengarahkan Stdout dan Stderr

Ya, mungkin untuk mengarahkan keduanya secara bersamaan. Yang Anda butuhkan hanyalah menyebutkan deskripsi ID 1 dan 2 sebelum pengalihan.

$dibuangHalo Dunia1>keluaran.log2>debug.log

Pikiran terakhir

stdin , stdout , dan stderr adalah fitur luar biasa yang ditawarkan bash secara default. Jika Anda menyukai skrip bash, menggunakannya bisa sangat berguna dalam situasi sulit.

Ingin mempelajari lebih lanjut tentang skrip bash? Mari kita mulai dengan ini panduan pemula untuk bash scripting !

Menikmati!