Linux / Debian - Moreutils'deki 'pee' ne yapıyor?


Yanıtlar:


29

İşte işemek ile yapabilecekleriniz:

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

Yani işemek dosyalar yerine kabuk boruları ile çalışır.

bash işemek gerekmez, kabuk komutlarını dosya olarak açabilir:

cat file |tee >(sort -u > sorted) >(sort -R > unsorted)

1
Bu dosya adı jockers ile çalışır mı? Bkz. Zgp.org/~dmarti/tips/git-multiple-post-receive-hooks - pee, stdindosya adı düzenini matematik yapan her komut dosyasına çoğalmak ve klonlar vermek için kullanılır , saf bash bunu yapabilir mi? AFAIU bunun gibi parantez causnig içten bir şeyi yıldız işareti artıracağı tee >(app1 app2 app3 app4)hangi değil >(app1) >(app2) >(app3) >(app4)Cevabın gösterileri
Aryok '

@Arioch, bash sözdizimi hooks-joker tekniğiyle çalışmaz. Sadece daha fazla kurulum yükleyin.
Tobu

1
Kullanım tee >/dev/nullStdout'a Stdin'i kopyalayan önlemek için
jfs

1
tee üzerinde işemek gerçek avantajı, her alt işlemden stdout işemek kendisi stdout gönderir olmasıdır. tee ile kaydetmek istediğiniz her işlemi stdout bir dosyaya yönlendirmeniz gerekir, ancak işemek ile stdout kaydetmek gerekir. Tabii ki her alt komut benzer şekilde biçimlendirilmiş bir şey çıkarıyorsa bu mantıklıdır. Grep'te nasıl yapabileceğinizi veya düzenli ifadeleri anlayamazsanız cat file | pee 'grep this' 'grep that' > lines.with.this.or.that.txt... tee kullanarak sadece stdout'un bir kopyasını alırsınız file.
boşalması

Bu >(command)özelliğe İşlem ikamesi denir .
Vlastimil Ovčáčík

16

İlk teekez kullanıp kullanmadığınızı anlamak muhtemelen daha kolaydır . Bu kullanışlı eski araç standart girdi alır ve birden fazla dosyaya ve standart çıktıya yazar. Devamındaki:

echo "Hello world" | tee one two

Her ikisi de dizeyi içeren oneve adında iki dosya oluşturur . Ayrıca terminalinize de yazdıracaktır.twoHello world


Şimdi peebenzer bir işlevi yerine getirir, ancak çıktıyı birden çok dosyaya yönlendirmek yerine, birden çok ikincil komut olan ala borularına yönlendirir. teeOrijinal stdin'i stdout'a göndermemesi bakımından biraz farklıdır , çünkü ikincil komutların çıktısıyla birleştirilmesi mantıklı olmaz. Aşağıdaki çok basit örnek:

echo "Hello world" | pee cat cat

Dizeyi Hello worldterminalinize iki kez çıkarır. Bunun nedeni, iki örneğin her birinin catstandart çıktıyı alması ve ne yaptığını cat, yani yazdırılanı yapmasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.