Mengapa perintah grep ini tidak berfungsi?


24

Ketika saya mencoba menggunakan grep dengan cara ini:

service --status-all | grep network

Itu masih mencantumkan semua layanan meskipun saya menyalurkannya ke grepuntuk membatasi hanya ke string "jaringan"


Setelah Fakta:

Melihat artikel ini yang menjelaskan mengapa perintah berperilaku seperti ini, itulah yang saya sukai tentang linux, selalu ada alasan bagus, tetapi tidak perlu intuitif

Jawaban:


41

Mencoba:

service --status-all |& grep network

Aplikasi baris perintah dapat mencetak ke dua aliran teks yang dikenal sebagai standar keluar (stdout) dan kesalahan standar (stderr). Secara default, terminal hanya menampilkan output untuk keduanya secara identik.

Stdout diberi nomor 1, dan stderr diberi nomor 2. Secara default, operator pengalihan, seperti >, |dan <hanya berlaku untuk stdout, nomor 1.

|&pipa baik stdout dan stderr bersama untuk proses pada aliran input standar (stdin) kanan, yang membuat greppekerjaan seperti yang Anda harapkan.

Saya tidak tahu mengapa service --status-allmencetak ke stderr di sini, tetapi secara umum, memiliki aliran stderr terpisah sangat berguna, karena memungkinkan Anda melihat kesalahan bahkan ketika stdout dibungkam.


Terima kasih atas jawabannya, sepertinya ini telah menghasilkan banyak minat. Jadi saya kira saya bukan satu-satunya dengan masalah ini.
Meer Borg

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.