Grep neden yeniden yönlendirme ile çalışmıyor?


15

topKomutu yeniden yönlendirme ile kullanmak iyi çalışır:

top > top.log

Şimdi belirli bir satırı filtrelemek için grep kullanmak istiyorum:

top | grep "my_program" > top.log

Ancak günlük dosyası boş kalacaktır. Ancak grep, kullanırken bir çıktı sağlar

top | grep "my_program"

my_programBazı çıktıları görmek için nerede çalışan bir programla değiştirilmelidir.

Yaklaşımım neden çalışmıyor? Nasıl düzeltebilirim?

bash  grep 

2
Sadece denedim ve benim için çalışıyor. Ancak, muhtemelen bunun yerine veya kullanma -bseçeneğine bakmalısınız . topps
Lev Levitsky

-bsorunumu çözmedi, ancak bazı kodlama sorunlarını çözdü. Teşekkür ederim.

Yanıtlar:


22

Tarif ettiğin davranışların aynısını alıyorum. Ubuntu 11.10'da

top | grep "my_program" > top.log

herhangi bir çıktı üretmez.

Bunun sebebinin grep'in çıktısını tamponlaması olduğuna inanıyorum. GNU grep'e çıktıyı satır satır tükürmesini söylemek için şu --line-bufferedseçeneği kullanın:

top | grep --line-buffered "my_program" > top.log

Diğer potansiyel çözümler için bu SO sorusuna da bakınız .


3
+1 --line-bufferedsorunu çözer.

Teşekkür ederim, bu benim için de sorunu çözüyor. -bSeçenek de hala Lev Levitsky iyi bir tavsiyedir. Bu, günlük dosyasıyla ilgili bazı kodlama sorunlarını çözdü.

2

kullanmalısın:

top -n 1 | grep "blah" > top.log

"-n 1" bir yineleme için en üstte çalışır ve daha sonra birkaç saniyede bir sürekli güncellemek yerine sonlandırılır

çünkü ps kullanmak için daha iyi bir araç olsa da sadece bir satır arıyorsunuz.


1

Bu sorun için geçici çözümüm:

while :;do top -b -n 1 | grep "my_program" >> top.log;done &

Bu şekilde my_program için arka planda çalışan bir monitör alabilir ve tüm sonuçları top.log dosyasında tutabilirim.



0

Her ikisi de benim için çalışıyor olsa da, Lev Levitsky'nin tavsiyesinin doğru olduğunu düşünüyorum. Kullan-bArgümanı .

Çıktı yeniden yönlendirmesinin sorun olması ve stdout aracılığıyla hiçbir şey almamanız için iyi bir şans var, bu yüzden bunu deneyin:

top -b 2>&1 | grep "my_program" > top.log

Ayrıca çıktı arabelleğe alma ile ilgili sorunlarınız olabileceğini unutmayın. Kabuğunuz sürekli olarak dosyaya yazmaz, böylece top.logdoldurulması biraz zaman alabilir .

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.