Bagaimana saya bisa menyalurkan output dari satu perintah ke input dari dua perintah lainnya secara bersamaan?
Bagaimana saya bisa menyalurkan output dari satu perintah ke input dari dua perintah lainnya secara bersamaan?
Jawaban:
Kedengarannya seperti tee
perintah 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 ls
sebagai input ke dua grep
program yang berbeda , simpan output masing-masing grep
ke file yang berbeda, dan pipa semua hasil melalui less
, coba:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less
Hasil ls -A
akan "disalurkan" ke dalam keduanya grep
. File hidden-files
akan memiliki konten dari output yang pertama grep
, dan normal-files
akan memiliki hasil yang kedua grep
. Semua file akan ditampilkan di halaman EDIT : apa yang Anda lihat di less
.less
adalah keluaran yang sama persis dari ls -A
, bukan hasil dari grep
s. Jika Anda ingin mengubah output dari ls -A
menjadi 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 grep
s akan ditambahkan ke output ls -A
alih-alih menggantikannya.
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.".