Czy watch
monitoruje tylko widoczny wynik polecenia? Powiedz, że jestem w katalogu z następującą zawartością:
$ ls
a b c d e f g h i j k l m n
Po uruchomieniu watch -g ls -1
oczekuję, że zakończy się, jeśli plik zostanie dodany lub usunięty. W rzeczywistości dzieje się tak, że kończy działanie tylko wtedy, gdy dany plik jest widoczny na wyjściu terminalowym watch
:
$ watch -g ls -1
Every 2.0s: ls -1 Wed Nov 13 16:35:03 2013
a
b
c
d
e
f
Usunięcie pliku m
, który nie jest widoczny ze względu na rozmiar mojego terminala, nic nie robi. Usunięcie widocznego pliku, powiedzmy d
, powoduje watch
zakończenie zgodnie z oczekiwaniami.
-g
Flaga jest wyjaśnione thusly w mojej man
stronie:
-g, --chgexit
Exit when the output of command changes.
Co się dzieje? Czy to normalne? Jak korzystać watch
z poleceń o długim wyniku? Używam, watch from procps-ng 3.3.4
który został zainstalowany z repozytoriów Debiana.
-g
opcjawatch
? Nie znajduję tego w mojej wersjiwatch
Odpowiedzi:
Znalazłem ten wątek: Bug # 225549: have watch monitor stderr . Wątek pochodzi z 2008 roku, ale wygląda na to, że starsze wersje nie obsługują oglądania niczego innego niż STDOUT.
Jesteśmy więc ograniczeni tylko do STDOUT. Jeśli chodzi o widoczne jest dużo w języku
info watch
iman watch
że każ mi myśleć twój obserwacja / założenie jest prawidłowe.fragment
Również ten fragment pod BŁĘDAMI:
Gdybym musiał zgadywać, pomyślałbym, że przechowują widoczne fragmenty w buforze między seriami, a następnie analizują tylko te znaki.
EDYCJA 1
Debugowałem to dalej za pomocą
strace
i możesz zobaczyćwatch
odczyt danych wyjściowych zls
polecenia, aby wewnętrznie porzucić zmianę.zanim usunę
m
plikpo usunięciu
m
plikuźródło
watch -g foo; echo "Something changed!"
. Wydaje się to dziwnie paraliżującym błędem w tak ustalonym programie.-g
przełącznika, ale wypróbowałem go na Ubuntu i zachowuje się tak samo.Jestem pewien, że szukasz narzędzi inotify .
Mówi moja strona do oglądania z procps-ng
źródło
watch
zachowywać się jak OP i wyjdzie ze zmianą.watch
zachowuje. On wie o inotify.