İzleme komutunu komutlu bir komut / program zinciri ile birlikte kullanma


50

Genellikle watchher n saniyede bir komutun çıktısını izlemek için linux yardımcı programını kullanıyorum,watch df -h /some_volume/

Ancak aşağıdaki gibi watchbir dizi komutla kullanamıyorum :

$ watch ls -ltr|tail -n 1

Bunu yaparsam watch, gerçekten izliyor ls -ltrve tail -n 1hiçbir şey çıkmayan çıktı iletiliyor.

Bunu denersem:

$ watch (ls -ltr|tail -n 1)

alırım

$ watch: syntax error near unexpected token `ls'

Ve aşağıdakilerden herhangi biri bir nedenden veya başka bir şeyden başarısız olur:

$ watch <(ls -ltr|tail -n 1)

$ watch < <(ls -ltr|tail -n 1)

$ watch $(ls -ltr|tail -n 1)

$ watch `ls -ltr|tail -n 1)`

Ve sonunda bunu yaparsanız:

$ watch echo $(ls -ltr|tail -n 1)

Verilen aralıkta çıktıda bir değişiklik göremiyorum çünkü içerdeki komut $()sadece bir kez çalıştırılıyor ve elde edilen çıktı dizgisi her zaman değişmez olarak basılıyor ("izleniyor").

Öyleyse watchemirleri [onları bir betiğin içine koyanlar] borulu bir emir zinciri ile nasıl çalıştırabilirim ?


Koş man watchve örneklere geç ...
don_crissti

Yanıtlar:


80
watch 'command | othertool | yet-another-tool'

1
Jenerik yaklaşıma dikkat watch sh -c 'command | etc'çekmeye değer olabilir, özellikle de soruda denenen yaklaşımlara bakmak.
sourcejedi

@sourcejedi Neden olduğunu tam olarak anlamadım, ancak bu her zaman aynı sonuçları vermez.
Michael Mior,


1

Tüm alt dizinlerdeki tüm dosyaları da listelemek isterseniz, exec komutuyla find komutunu kullanabilirsiniz.

watchHer 30 saniyede bir güncelleme findyapacak ve geçerli dizindeki tüm * .log dosyalarını arayacak (alt dizinler dahil) ve dosya adlarını ve son 10 satırını yazacaktır:

watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
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.