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.