Zwykle użytkownik watch
linuksa 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ć watch
z szeregu poleceń takich jak:
$ watch ls -ltr|tail -n 1
Jeśli to zrobię, watch
to naprawdę oglądam ls -ltr
i przekazuję wyjście, do tail -n 1
któ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 watch
polecenie działało z szeregiem poleceń [innym niż umieszczanie ich w skrypcie]?
man watch
i przewiń w dół do przykładów ...Odpowiedzi:
źródło
watch sh -c 'command | etc'
zwłaszcza na podejście wypróbowane w pytaniu.pozwól, że bierzemy fajkę i biegamy z rzędu.
źródło
-n 1
?Jeśli chcesz również wyświetlić listę wszystkich plików w podkatalogach, możesz użyć polecenia find z opcją exec.
watch
będzie aktualizować co 30 sekund ifind
będzie wyszukiwać wszystkie pliki * .log w bieżącym katalogu (łącznie z podkatalogami) i drukuje nazwy plików oraz ich ostatnie 10 wierszy:źródło