Apakah output dari satu perintah dapat disalurkan ke dua perintah lainnya?


Jawaban:


56

Kedengarannya seperti teeperintah akan melakukan apa yang Anda inginkan.

Kuncinya adalah menggunakan

>( )

untuk substitusi proses . Dengan tee, gunakan pola berikut:

tee >(proc1) >(proc2) >(proc3) | proc4

Jadi jika Anda ingin menggunakan output lssebagai input ke dua grepprogram yang berbeda , simpan output masing-masing grepke file yang berbeda, dan pipa semua hasil melalui less, coba:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

Hasil ls -Aakan "disalurkan" ke dalam keduanya grep. File hidden-filesakan memiliki konten dari output yang pertama grep, dan normal-filesakan memiliki hasil yang kedua grep. Semua file akan ditampilkan di halaman less. EDIT : apa yang Anda lihat di lessadalah keluaran yang sama persis dari ls -A, bukan hasil dari greps. Jika Anda ingin mengubah output dari ls -Amenjadi less, (mis. Menukar urutan sehingga file normal terdaftar sebelum yang tersembunyi) kemudian coba ini:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Tanpa >/dev/null, output dari greps akan ditambahkan ke output ls -Aalih-alih menggantikannya.

sumber


3
ini sangat bagus!
hayalci

3
+1 karena bahkan setelah 10 tahun scripting shell, saya belum pernah melihat ini!
jtimberman

6

Gunakan "tee".

Contoh:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

Ini akan mengirim output dari perintah grep ke terminal dan ke wc (yang outputnya diarahkan ke file grepresult).

"Tee" dijelaskan dalam tee artikel Wikipedia (perintah) . Central adalah: "Perintah tee membaca input standar, kemudian menulis kontennya ke output standar dan secara bersamaan menyalinnya ke file atau variabel yang ditentukan.".

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.