Часы только контролируют видимый вывод?

Это - просто более короткая версия другого while+sleep ответы при выполнении этого вида задач часто как распорядок дня, с помощью этого, сохраняют Вас от ненужных нажатий клавиш, и если Ваша командная строка начинает получать более долгое понимание, что этот немного легче. Но этот запускает со сна сначала.

Это обычно полезно, если необходимо следовать, что-то имеет короткий вывод как загрузка машины:

while sleep 1; do uptime; done
12
25.03.2018, 02:23
2 ответа

Я нашел этот поток названным: Bug#225549: имейте монитор часов stderr. Тот поток с 2008, но похоже, что более старые версии не поддерживают наблюдение ничего кроме STDOUT.

Таким образом, мы ограничены просто STDOUT. Что касается видимого существует много языка в info watch и man watch это заставляет меня думать, что Ваше наблюдение/предположение корректно.

выборка

   watch runs command repeatedly, displaying its output (the first screen‐
   full).   This  allows you to watch the program output change over time.
   By default, the program is run every 2 seconds; use -n or --interval to
   specify a different interval.

Также этот бит под ОШИБКАМИ:

BUGS
       Upon  terminal resize, the screen will not be correctly repainted until
       the next scheduled update.  All --differences highlighting is  lost  on
       that update as well.

Если бы я должен был предположить, что думал бы, что они хранили видимые биты в буфере между выполнениями и затем анализировали просто те символы.

РЕДАКТИРОВАНИЕ № 1

Я отладил это дальнейшее использование strace и Вы видите watch чтение вывода от ls управляйте, таким образом, это внутренне отменяет изменение.

прежде чем я удалю m файл

$ strace -o w.log watch -g 'ls -1'
read(3, "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\nw.lo"..., 4096) = 34
close(3)                                = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0x7f4da83af000, 4096)            = 0
wait4(31011, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 31011
rt_sigaction(SIGTSTP, {SIG_IGN, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, 8) = 0
write(1, "\33[H\33[2JEvery 2.0s: ls -1\33[1;140H"..., 119) = 119
rt_sigaction(SIGTSTP, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, NULL, 8) = 0
nanosleep({2, 0}, NULL)                 = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
pipe([3, 4])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f4da839f9d0) = 31014
close(4)                                = 0
fcntl(3, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4da83af000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
read(3, "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\nw.lo"..., 4096) = 34
close(3)                                = 0
munmap(0x7f4da83af000, 4096)            = 0
--- SIGCHLD (Child exited) @ 0 (0) ---

после m файл удален

--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigaction(SIGTSTP, {SIG_IGN, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, 8) = 0
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
write(1, "\33[1;158H8\33[11;163H", 18)  = 18
rt_sigaction(SIGTSTP, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, NULL, 8) = 0
nanosleep({2, 0}, NULL)                 = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
pipe([3, 4])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f4da839f9d0) = 31028
close(4)                                = 0
fcntl(3, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4da83af000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
read(3, "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nn\nw.log\n", 4096) = 32
close(3)                                = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0x7f4da83af000, 4096)            = 0
wait4(31028, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 31028
9
27.01.2020, 19:56
  • 1
    Да, это просто кажется странным, это лишает возможности выполнять что-то как watch -g foo; echo "Something changed!". Это кажется странно наносящей вред ошибкой в такой установленной программе. поблагодарите Вас –  terdon♦ 14.11.2013, 03:50
  • 2
    @terdon - моя древняя версия Fedora не имела -g переключитесь, но я попробовал его на Ubuntu, и это ведет себя то же. –  slm♦ 14.11.2013, 04:19
  • 3
    OK, это действительно странно затем. Таким образом, это действительно на самом деле контролирует и видит изменение, это просто не реагирует на него! Определенно ошибка затем. –  terdon♦ 14.11.2013, 14:15

Я ожидаю, что это выйдет, если файл будет добавлен или удален

Я вполне уверен, Вы после inotify-инструментов.

В моей странице справочника для часов, от procps-ng, говорится

следите за командой выполнений неоднократно, отображая ее вывод и ошибки (первое экранное).

2
27.01.2020, 19:56
  • 1
    Это не то, о чем он спрашивает, он пытается понять поведение появления обновления, отображаемого через STDOUT, но не видим в терминале b/c, он изменил размер его так, чтобы вывод, который изменяется, был "от экрана". Большинство все, с которыми я обсудил это сегодня, ожидали бы watch вести себя как OP и выход с изменением. –  slm♦ 14.11.2013, 09:06
  • 2
    Да мы уже обсудили это также, я выделил тот же самый текст в своем ответе. Я знаю Terdon довольно хорошо, и в этой точке он хочет знать причину почему. –  slm♦ 14.11.2013, 09:32
  • 3
    я соглашаюсь, что это не ответ на его вопрос, но это - решение его проблемы. –  jthill 14.11.2013, 09:33
  • 4
    Вы означаете использовать inotify? Это не то, что он после, он хочет знать почему watch ведет себя этот путь. Он знает о inotify. –  slm♦ 14.11.2013, 09:34
  • 5
    Это - его вопрос. То, что он пытается сделать с ним, - то, что я заключил в кавычки: ожидайте файла, который будет добавлен или удален. Часы не являются инструментом для того задания. –  jthill 14.11.2013, 09:36

Теги

Похожие вопросы