Bir komutun çıktısı diğer iki komuta iletilebilir mi?


Yanıtlar:


56

teeKomut istediğini yapacak gibi geliyor .

Anahtar kullanmaktır

>( )

için işlem yerine . İle tee, aşağıdaki deseni kullanın:

tee >(proc1) >(proc2) >(proc3) | proc4

Eğer çıktısını kullanmak istedi Yani eğer lsgirdi olarak iki farklı grepher çıkışında tasarruf programları greptüm aracılığıyla farklı sonuç dosyalarına ve boru less, deneyin:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

ls -Aİsteğin sonuçları her ikisine de "aktarılacak" grep. Dosya hidden-filesilk çıkışından itibaren içeriğe sahip olacaktır grepve normal-filessaniyenin sonuçları olacaktır grep. Tüm dosyalar çağrı cihazında gösterilecektir less. DÜZENLEME : Eğer gördüklerinizi lessolan aynı kesin çıkış ait ls -Adeğil sonucudur greps. Eğer çıktı değiştirmek istiyorsanız ls -Aiçin less, (normal dosyalar gizli olanlar önce listelenen böylece örneğin takas sipariş) o zaman bu deneyin:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Olmadan >/dev/null, greps'nin çıktısı ls -Ayerine yerine çıktıya eklenir .

kaynak


3
bu çok iyi!
hayalci

3
+1, çünkü 10 yıllık bir kabuk komut dosyası çalıştırdıktan sonra bile, bunu hiç görmedim!
jtimberman

6

"Tee" yi kullan.

Örnek:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

Bu hem terminale ve grep komutunun çıktısını gönderir wc (kimin çıktı sırayla dosya grepresult yönlendirilir).

"Tee" Wikipedia makalesinde tee (komut) ile açıklanmıştır . Merkezi şudur: "tee komutu standart girişi okur, ardından içeriğini standart çıktıya yazar ve aynı anda belirtilen dosyalara veya değişkenlere kopyalar."

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.