Selamat datang di hari Jumat lainnya ...
Saatnya untuk mengenal bagian kecil dari terminal. Setelah berpikir panjang, saya memutuskan untuk membuat postingan tentang aliran standar; Meskipun akan dangkal, saya pikir itu adalah sesuatu yang harus diketahui semua orang.
Aliran Standar
Aliran Standar Itu terdiri dari beberapa saluran komunikasi antara pengguna dan terminal. "Saluran" Input / Output ini menampilkan atau menangkap informasi ketika perintah dijalankan.
3 koneksi I / O adalah: stdin Input standar, stdout Keluaran standar, stderr Kesalahan standar.
stdin: Masukan standar
Input standar adalah cara kami menangkap informasi dari sebuah perintah, baik melalui pipa, pengalihan, keyboard, dll. Kami mengidentifikasinya dengan deskriptor file 0.
Contoh stdin adalah:
urutkan <daftar
Ini mengambil semua informasi yang ada dalam daftar -dalam hal ini nomor yang ditulis secara acak-, dan ketika mengarahkan file ke perintah ls, itu mengurutkan daftar numerik menurut abjad. Dalam contoh ini, bendera bersifat implisit.
stdout: Output standar
Output standar, seperti namanya, menampilkan output dari sebuah perintah melalui konsol. Jika kita menulis ls, semua informasi yang ditampilkan di layar adalah keluaran standar. Itu diwakili oleh deskriptor 1.
Sekarang saya akan mencoba memberi contoh stdin dan stdout dengan skrip yang ditulis dalam bash, hanya karena saya suka bash hahaha. 🙂
tes.sh
#! / bin / bash if [-t 0]; lalu echo "You're using stdout" elif [-t 1]; lalu echo "Anda menggunakan stdin" lain echo "Kesalahan brutal" fi
Sekarang tangkapan layar yang menunjukkan cara menggunakan skrip. Saat mengarahkan atau menggunakan pipa dengan penggunaan skrip tes -t untuk mengetahui apakah hanya skrip stdout yang dijalankan, dan jika tidak, jelas stdin.
bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Ingatlah untuk mengubah perintah dan praktik agar Anda belajar.
stderr: Kesalahan standar
Kesalahan Standar adalah cara program menampilkan kesalahan atau diagnostik. Itu diwakili oleh deskriptor 2.
Untuk memahami konsep, inilah situasinya: ketika kita ingin menyimpan kesalahan perintah, hal pertama yang kita pikirkan adalah mengarahkan output ke teks biasa.
ls> info.txt
Ini akan berhasil, informasi perintah akan disimpan dalam file teks biasa. Tetapi ketika menyimpan kesalahan, itu tidak menyimpannya, tetapi menampilkannya di layar dan file teks biasa kosong.
Sebaliknya jika kita menggunakan 2> untuk menunjukkan untuk menyimpan stderr di file:
ls foo 2> info.txt
Sekarang ini akan menyimpan informasi kesalahan di file teks.
paling Kulit izinkan stderr dan stdout disimpan dalam satu perintah perintah dengan &> di mana Foo adalah direktori yang tidak ada
ls Download Foo &> info.txt
File ini akan berisi informasi kesalahan saat menjalankan ls di Foo dan akan mencantumkan direktori di bawah Download.
Dan akhirnya, apa yang terkenal itu 2> & 1?
Sederhana, alihkan stderr ke stdout. Itu & di tengah> dan 1 berarti itu akan dialihkan ke stdout. Jika tidak ada, itu akan menjadi sesuatu seperti ... "redirect error ke file 1".
Dan dengan ini dimungkinkan untuk mengalihkan:
- stdout ke file
- stderr ke file
- stdout ke stderr
- stderr ke stdout
- stderr dan stdout ke file
- antara lain
Sekian untuk hari ini. Kami membaca dan terima kasih sudah mampir. 😀
Menarik. Berkat tutorial Anda, saya lebih menyukai Bash.
Yang terhormat, menarik, namun Anda mengalami kesalahan di baris berikut:
"Dan saat mengarahkan file ke perintah ls", itu harus "dan saat mengarahkan file ke perintah sortir".
Sebuah ucapan.
Ada kesalahan di awal teks, saat Anda menunjukkan perintah "ls", seharusnya "sort":
«Dibutuhkan semua informasi yang ada dalam daftar -dalam hal ini angka-angka yang ditulis secara acak-, dan ketika mengarahkan file ke perintah ls (di sini akan diurutkan)»
Salam dan terima kasih telah berbagi pekerjaan Anda
Ini bagus untuk cron, di mana Anda ingin keluarannya di-flush (/ dev / null) tetapi kesalahannya disimpan dalam file. Juga, ketika saya melakukan ini, saya biasanya menggunakan perintah tanggal untuk menentukan dengan tepat kapan mereka gagal.
Bash (sh) memiliki alat ini yang dikembangkan oleh filosofi Unix "lakukan satu hal, dan lakukan dengan baik"
Nah, saya belum menemukan apa-apa
Haha baiklah dijelaskan dengan cukup baik, apa yang belum Anda mengerti?