Контролирует watch
только видимый вывод команды? Допустим, я в каталоге со следующим содержимым:
$ ls
a b c d e f g h i j k l m n
Если я запускаю, watch -g ls -1
я ожидаю, что он завершится, если файл будет добавлен или удален. На самом деле происходит то, что он завершается, только если рассматриваемый файл виден в выводе терминала watch
:
$ watch -g ls -1
Every 2.0s: ls -1 Wed Nov 13 16:35:03 2013
a
b
c
d
e
f
Удаление файла m
, который не виден из-за размера моего терминала, ничего не делает. Удаление видимого файла, скажем d
, приводит watch
к завершению, как и ожидалось.
-g
Флаг объясняется в моей константы выглядит man
странице:
-g, --chgexit
Exit when the output of command changes.
В чем дело? Это нормально? Как я могу использовать watch
для команд с длинным выводом? Я использую watch from procps-ng 3.3.4
который был установлен из репозиториев Debian.
-g
опцияwatch
? Я не нахожу это в моей версииwatch
Ответы:
Я нашел эту тему под названием: Ошибка # 225549: есть монитор часов stderr . Этот поток с 2008 года, но, похоже, старые версии не поддерживают просмотр ничего, кроме STDOUT.
Таким образом, мы ограничены просто STDOUT. Что касается видимого, в нем много языка,
info watch
иman watch
это заставляет меня думать, что ваши наблюдения / предположения верны.выдержка
Также этот бит под ошибками:
Если бы мне пришлось угадывать, я бы подумал, что они хранят видимые биты в буфере между запусками, а затем анализируют только эти символы.
РЕДАКТИРОВАТЬ # 1
Я отлаживал это дальше, используя,
strace
и вы можете видетьwatch
чтение выходных данныхls
команды, так что она внутренне отбрасывает изменения.прежде чем удалить
m
файлпосле
m
удаления файлаисточник
watch -g foo; echo "Something changed!"
. Кажется странно вредной ошибкой в такой установленной программе.-g
переключателя, но я попробовал его на Ubuntu, и он ведет себя так же.Я почти уверен, что вам нужны инструменты inotify .
Моя man-страница для часов от procps-ng говорит
источник
watch
вести себя как ОП и выйдут с изменением.watch
себя ведет. Он знает о inotify.