Linux / Debian - Apa yang dilakukan 'kencing' di moreutils?

21

Baru-baru ini saya menemukan paket 'moreutils' di Debian (dan Ubuntu) . Ini adalah koleksi alat unix yang mudah digunakan.

Salah satu perintahnya adalah 'kencing'. Halaman manual mengatakan:

kencing seperti tee tetapi untuk pipa.

Namun itu adalah halaman manual pendek, saya telah mengajukan bug tentang hal itu . Adakah yang tahu apa fungsinya, bagaimana cara menggunakannya, mengapa orang menggunakannya?

Rory
sumber

Jawaban:

29

Inilah yang dapat Anda lakukan dengan kencing:

seq 5 -1 1 > file
cat file |pee 'sort -u > sorted' 'sort -R > unsorted'

Jadi kencing bekerja dengan pipa shell bukan file

bash tidak perlu kencing, itu bisa membuka perintah shell sebagai file:

cat file |tee >(sort -u > sorted) >(sort -R > unsorted)
Tobu
sumber
1
Apakah ini bekerja dengan atlet nama file? Lihat zgp.org/~dmarti/tips/git-multiple-post-receive-hooks - kencing digunakan untuk melipatgandakan stdindan memberikan klon ke setiap skrip yang menghitung pola nama file, dapatkah bash murni melakukan ini? AFAIU itu akan memperluas tanda bintang di dalam kurung causnig sesuatu seperti tee >(app1 app2 app3 app4)yang bukan >(app1) >(app2) >(app3) >(app4)jawaban Anda menunjukkan
Arioch 'The
@Arioch, sintaks bash tidak akan bekerja dengan teknik hooks-joker. Cukup instal moreutils.
Tobu
1
Gunakan tee >/dev/nulluntuk menghindari replikasi stdin ke stdout
jfs
1
keuntungan sebenarnya dari pee over tee adalah mengirimkan stdout dari setiap sub proses ke stdout of pee itu sendiri. dengan tee Anda perlu mengarahkan ulang setiap proses stdout ke file jika Anda ingin menyimpannya, tetapi dengan kencing Anda hanya perlu menyimpan stdout. tentu saja itu hanya masuk akal jika setiap sub perintah mengeluarkan hal yang diformat sama. seperti jika Anda tidak tahu bagaimana cara atau ekspresi reguler dalam grep yang dapat Anda lakukan cat file | pee 'grep this' 'grep that' > lines.with.this.or.that.txt... menggunakan tee Anda hanya akan mendapatkan salinan filedi stdout.
underrun
The >(command)Fitur ini disebut Proses substitusi .
Vlastimil Ovčáčík
16

Mungkin lebih mudah untuk dipahami jika Anda telah menggunakannya teeterlebih dahulu. Alat lama yang bermanfaat ini mengambil input standar dan menulis ke banyak file, ditambah output standar. Pengikut:

echo "Hello world" | tee one two

Akan membuat dua file, bernama onedan two, keduanya berisi string Hello world. Itu juga akan mencetak ke terminal Anda.


Sekarang peemelakukan fungsi yang sama tetapi alih-alih mengarahkan output ke beberapa file, ia mengalihkan ke beberapa perintah sekunder, ala pipa. Ini sedikit berbeda dari teedalam hal tidak mengirim stdin asli ke stdout karena tidak masuk akal menggabungkannya dengan output dari perintah sekunder. Contoh sangat sederhana berikut ini:

echo "Hello world" | pee cat cat

Akan menampilkan string Hello worldke terminal Anda dua kali. Ini karena masing-masing dari dua contoh catmenerima output standar dan melakukan apa yang catdilakukan, yang dicetak.

Dan Carley
sumber