GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Mengirim Stdout Ke Beberapa Perintah?

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.

Terkait:Ubuntu – XFCE – Kirim jendela ke monitor lain saat penekanan tombol?

Anda dapat menempatkan beberapa proses di tee bagian:

cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors

Linux
  1. Cara Membuat Zip Banyak File di Linux

  2. Beberapa Perintah Di Sshpass?

  3. Bagaimana Mengirim Perintah ke Terminal Apa Pun?

  1. Cara menggunakan perintah riwayat Bash

  2. Tutorial Unix Sed:Cara Mengeksekusi Beberapa Perintah Sed

  3. Cara mengatur waktu sekelompok perintah di Bash

  1. Kirim perintah ke beberapa sesi SSH dengan Terminator

  2. Cara Menambahkan Banyak Host di phpMyAdmin

  3. Bagaimana cara menjalankan beberapa perintah latar belakang di bash dalam satu baris?