Ada beberapa perintah yang memfilter atau bertindak berdasarkan input, dan kemudian meneruskannya sebagai output, menurut saya biasanya ke stdout – tetapi beberapa perintah hanya akan mengambil stdin dan melakukan apa pun yang mereka lakukan dengannya, dan tidak menghasilkan apa-apa.
Saya paling akrab dengan OS X dan ada dua yang langsung muncul di benak saya adalah pbcopy dan pbpaste – yang merupakan sarana untuk mengakses clipboard sistem.
Bagaimanapun, saya tahu bahwa jika saya ingin mengambil stdout dan mengeluarkan output untuk pergi ke keduanya stdout dan file maka saya dapat menggunakan tee memerintah. Dan saya tahu sedikit tentang xargs , tapi saya rasa bukan itu yang saya cari.
Saya ingin tahu bagaimana saya dapat membagi stdout untuk pergi di antara dua (atau lebih) perintah. Misalnya:
cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
Mungkin ada contoh yang lebih baik dari itu, tapi saya benar-benar tertarik untuk mengetahui bagaimana saya bisa mengirim stdout ke perintah yang tidak menyampaikannya dan sambil menjaga stdout dari "dibisukan" – Saya tidak bertanya tentang cara cat sebuah file dan grep sebagian dan salin ke clipboard – perintah khusus tidak begitu penting.
Juga – Saya tidak bertanya bagaimana cara mengirim ini ke file dan stdout – ini mungkin pertanyaan “duplikat” (maaf) tetapi saya mencari dan hanya dapat menemukan pertanyaan serupa yang menanyakan tentang cara membagi antara stdout dan file – dan jawaban untuk pertanyaan itu sepertinya tee , yang menurut saya tidak akan berhasil untuk saya.
Terakhir, Anda mungkin bertanya “mengapa tidak menjadikan pbcopy sebagai hal terakhir dalam rantai pipa?” dan tanggapan saya adalah 1) bagaimana jika saya ingin menggunakannya dan masih melihat output di konsol? 2) bagaimana jika saya ingin menggunakan dua perintah yang tidak menampilkan stdout setelah mereka memproses input?
Oh, dan satu hal lagi – saya sadar saya bisa menggunakan tee dan pipa bernama (mkfifo ) tetapi saya berharap cara ini dapat dilakukan sebaris, secara ringkas, tanpa pengaturan sebelumnya
Jawaban yang Diterima:
Anda dapat menggunakan tee dan proses substitusi untuk ini:
cat file.txt | tee >(pbcopy) | grep errors
Ini akan mengirimkan semua output dari cat file.txt ke pbcopy , dan Anda hanya akan mendapatkan hasil grep di konsol Anda.
Anda dapat menempatkan beberapa proses di tee bagian:
cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors