tee stdout için stderr?


17

Stdout'u bir süreçten başka bir sürecin standartına, aynı zamanda konsola göndermek istiyorum. Örneğin stdout'u stdout + stderr'e gönderme.

Örneğin git edit, aşağıdakilere takma adım var :

git status --short | cut -b4- | xargs gvim --remote

Dosya adlarının listesinin de ekrana gönderilmesini istiyorum xargs.

Peki, teebunu yapacak benzeri bir yardımcı program var mı? Böylece şöyle bir şey yapabilirim:

git status --short | \
    cut -b4- | almost-but-not-quite-entirely-unlike-tee | \
    xargs gvim --remote

Yanıtlar:


14

tee kullanarak mevcut konsola çoğaltabilir tee /dev/tty

git status --short | cut -b4- | tee /dev/tty | xargs gvim --remote

Alternatif olarak, kullanabilirsiniz /dev/stdoutveya /dev/stderrkomutunuz bir komut dosyasındaysa yönlendirilebilir. /dev/ttyBunun her zaman konsol olacağını unutmayın (ve etkileşimli olmayan bir kabukta bulunmayabilir). Bu yanlış, yorumları okuyun.


1
Nitekim, boru hattında size göstermek /dev/stdout olduğunu yönlendirildi. Yani, tee /dev/stdoutetkiyi kullansaydınız , her şey xargsiki kez gönderilirdi ve hiçbir şey terminale gitmez.
— celtschk

/dev/stdoutbir boru tarafından yönlendirilmezse, geçerli işlem standart çıktısında kalır. Ancak, komutu bir komut dosyasına kapsülleyip bu komut dosyasının stdout'unu yeniden yönlendirirseniz, /dev/stdoutyeniden yönlendirilir. Etkileşimli bir konsolda tee /dev/ttyve tee /dev/stdoutboruları kullanırken bile aynı etkiye sahiptir.
— Vincent Robert

Bana inanmıyorsanız, kabuğun altında ve türünü başlatmak echo foo | tee /dev/stdout | tr f bve echo foo | tee /dev/tty | tr f b. İşte size bir ipucu: Bu, dosya adı olarak teeyorumlanır /dev/stdout.
— celtschk

2
Haklısın, bunu nasıl özlediğimi bilmiyorum. Kendi kabuğumda tty ve stdout ile bazı testler yaptım ve bir şekilde bunu kaçırdım. Açıklama için teşekkürler, yanlış ifadeyi kaldırdım.
— Vincent Robert

Stderr'in borudan etkilenmediği göz önüne alındığında, bunu kaldırmanız gerekmeyecekti (elbette komut dosyası yeniden yönlendirme uyarısı kalır, ancak bir komut dosyası için yeniden yönlendirilebilirlik genellikle istenen bir özellik olacaktır).
— celtschk


3

Tee komutunu kullanabilirsiniz , örneğin STDERR dosyası ile besleyin, örneğin:

tee /dev/stderr
tee /proc/self/fd/2

bu durumda takma adınız belki:

git status --short | \
    cut -b4- | tee /dev/stderr | \
    xargs gvim --remote

1
Sanırım demek istedin/proc/self/fd/2
— celtschk
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.