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