2010-07-09 24 views

cevap

34
update-client 2>&1 | tee my.log 

2> & 1 standart çıkışa standart hatasını yönlendirir ve T standart çıktı ve dosyaya standart girdi gönderir.

+1

Ayrıca, günlük dosyasını ekleyebilirsiniz Ask Ubuntu sitesinde bu konuda bilgi ve tişört ile diğer maddeleri yapmak: http://linux.101hacks.com/unix/tee-command- örnekler/ – thegeek

4

Dosyayı güncellendiğinde izlemek için kuyruğu kullanmanız yeterlidir. Arkaplan komutunu çalıştırmak sonra sadece

$ tail -f my.log 

Sürekli güncellenir kullanmak yukarıdaki yukarıdaki komutundan sonra & ekleyerek orijinal süreci. (Dosyanın çalışmayı bitirdiğini size söylemez, böylece bitmiş olduğunu söylemek için günlüğe bir şey çıkartabilirsiniz. Ctrl-c kuyruğundan çıkmak için)

+2

Bu konuda sert kalabalık vay. Bu cevapta tam olarak neyin yanlış olduğu? – Cfreak

+2

Bu benim görüşüme göre 'tee' kullanmaktan binlerce kez daha kötüdür. –

+0

Gereksinim duyduğuma göre arka plan çalışabilir –

4

Başka bir seçenek, blok tabanlı çıktı yakalamayı içten kullanmaktır. komut dosyası (bu doğru teknik terim olup olmadığından emin değil).

Örnek

#!/bin/bash 
{ 
    echo "I will be sent to screen and file" 
    ls ~ 
} 2>&1 | tee -a /tmp/logfile.log 

echo "I will be sent to just terminal" 

Ben daha fazla kontrol ve esnekliğe sahip mi - ben bu yolu tercih ediyorum. Eğer eklemek istiyorsanız

command > /path/to/logfile 

(>>) ve çıkış gösterir: olacağını kabuğuna yazmadan

command | tee /path/to/logfile 

equivelent:

+0

teşekkürler, bu mükemmel bir şekilde çalıştı – wiak

2

Bunun için tee komutunu kullanabilirsiniz

command | tee -a /path/to/logfile 

boru std için, stdout'u sadece hataları yakalamak unutmayın: kabuğunda, -a seçeneği kullanmak err boru ile boru tarafından işlenmez. Eğer (stderr'e itibaren) hataları günlüğe, kullanımını isterseniz: çalıştırma komutunu ve stderr akışı yönlendirme (2) stdout'a (1):

command 2>&1 | tee /path/to/logfile 

Bu demektir. Bu tee uygulama ile boruya geçirilecektir.

burada açıklandığı gibi