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.