Boru ve stdout'a doğrudan çıkış


15

Bir komutun çıkışını oluşturup stdout'a yönlendirmenin bir yolu olup olmadığını merak ediyordum. Örneğin, fortunebir fal kurabiyesi yazdırır ve ayrıca panoya kopyalar:

$ fortune | tee >(?stdout?) | pbcopy 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)

1
OSX'im elimde değil, ne olacak fortune | tee $(tty) | pbcopy?
— Archemar

Yanıtlar:


10

Varsayımınız:

fortune | tee >(?stdout?) | pbcopy

fortuneÇıktı iki kez standart çıktıya yazılacağından , çıktıyı iki katına çıkarırsınız pbcopy.

OSX'te (ve diğer sistem desteklerinde /dev/std{out,err,in}) kontrol edebilirsiniz:

$ echo 1 | tee /dev/stdout | sed 's/1/2/'
2
2

ve 2yerine iki kez çıktı .12

Diğer dosya tanımlayıcılarını kullanmanız gerekir, örnek olarak standart hata /dev/stderr:

$ echo 1 | tee /dev/stderr | sed 's/1/2/'
1
2

veya ttybağlı sözde terminali almak için kullanın :

$ echo 1 | tee "$(tty)" | sed 's/1/2/'
1
2

İle zshve multiosopsiyon seti, İhtiyacınız olmayan teehiç:

$ echo 1 >/dev/stderr | sed 's/1/2/'
1
2

tee $(tty)Veya biliyorsunuz,tee /dev/tty
— Kenster

büyük açıklama, üst SO her yerde cevap.
— Merlin

12

teeher zaman standart çıktısına yazar. Verileri, standart çıktının zaten gittiği terminale ek olarak bir komuta göndermek istiyorsanız, sadece bu komutla işlem ikamesini kullanın. (Başlangıç >işlemine rağmen , işlem ikamesinin standart çıktıyı yönlendirmediğine dikkat edin, teekomut bir parametre olarak görür.)

fortune | tee >(pbcopy)

Bu iyi, aynı zamanda iyi bir çözüm.
— Merlin

0

cuonglm her şeyi söyledi.

Sadece dene:

fortune | tee "$(tty)" | pbcopy

tty/dev/pts/99etkileşimli oturumda (örneğin terminalde) gerçek sözde terminale (gibi ) çözümlemeli veya toplu işte, at ve arka plan programında tty içermemelidir .

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.