Jak korzystać z polecenia watch z potokowym łańcuchem poleceń / programów

51

Zwykle użytkownik watchlinuksa narzędzie do powtarzania wyjścia polecenia co n sekund, jak wwatch df -h /some_volume/

Ale wydaje mi się, że nie jestem w stanie korzystać watchz szeregu poleceń takich jak:

$ watch ls -ltr|tail -n 1

Jeśli to zrobię, watchto naprawdę oglądam ls -ltri przekazuję wyjście, do tail -n 1którego nic nie wyprowadza.

Jeśli spróbuję:

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

dostaję

$ watch: syntax error near unexpected token `ls'

I którykolwiek z poniższych przypadków zawodzi z jakiegoś powodu:

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

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

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

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

I na koniec, jeśli to zrobisz:

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

Nie widzę żadnych zmian w danych wyjściowych w danym przedziale czasu, ponieważ polecenie wewnątrz $()jest uruchamiane tylko raz, a wynikowy ciąg wyjściowy jest zawsze drukowany („oglądany”) jako literał.

Jak więc sprawić, by watchpolecenie działało z szeregiem poleceń [innym niż umieszczanie ich w skrypcie]?

Tulains Córdova
źródło
biegnij man watchi przewiń w dół do przykładów ...
don_crissti 25.10.16

Odpowiedzi:

82
watch 'command | othertool | yet-another-tool'
DopeGhoti
źródło
1
Warto zwrócić uwagę na ogólne podejście, a watch sh -c 'command | etc'zwłaszcza na podejście wypróbowane w pytaniu.
sourcejedi
@sourcejedi Naprawdę nie wiem, dlaczego, ale to nie zawsze daje takie same wyniki.
Michael Mior
12
watch -n 1 "ls -lrt | tail -n20; date"

pozwól, że bierzemy fajkę i biegamy z rzędu.

Soft Dot IE
źródło
po co -n 1?
Nam G VU
2
@NamGVU: Uruchom polecenie co 1 sekundę
Duc Tran
2

Jeśli chcesz również wyświetlić listę wszystkich plików w podkatalogach, możesz użyć polecenia find z opcją exec.

watchbędzie aktualizować co 30 sekund i findbędzie wyszukiwać wszystkie pliki * .log w bieżącym katalogu (łącznie z podkatalogami) i drukuje nazwy plików oraz ich ostatnie 10 wierszy:

watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
yoyomanYo
źródło