¿ watch
Solo monitorea la salida visible de un comando? Digamos que estoy en un directorio con los siguientes contenidos:
$ ls
a b c d e f g h i j k l m n
Si ejecuto watch -g ls -1
, espero que salga si se agrega o elimina un archivo. Lo que realmente ocurre es que salga solamente si el archivo en cuestión es visible en la salida del terminal de watch
:
$ watch -g ls -1
Every 2.0s: ls -1 Wed Nov 13 16:35:03 2013
a
b
c
d
e
f
Eliminar el archivo m
, que no es visible debido al tamaño de mi terminal, no hace nada. Suprimir un archivo visible, por ejemplo d
, hace watch
que salga como se esperaba.
La -g
bandera se explica así en mi man
página:
-g, --chgexit
Exit when the output of command changes.
¿Que esta pasando? ¿Esto es normal? ¿Cómo puedo usar watch
para comandos con salida larga? Estoy usando el watch from procps-ng 3.3.4
que se instaló desde los repositorios de Debian.
-g
opción dewatch
hacer? No lo encuentro en mi versión dewatch
Respuestas:
Encontré este hilo titulado: Bug # 225549: have watch monitor stderr . Ese hilo es de 2008, pero parece que las versiones anteriores no admiten la visualización de otra cosa que no sea STDOUT.
Por lo tanto, estamos limitados a STDOUT. En cuanto a lo visible, hay mucho lenguaje en el
info watch
yman watch
eso me hace pensar que su observación / suposición es correcta.extracto
También este bit bajo BUGS:
Si tuviera que adivinar, pensaría que estaban almacenando los bits visibles en un búfer entre ejecuciones y luego analizando solo esos caracteres.
EDITAR # 1
Lo depuré más usando
strace
y puede ver lawatch
lectura del resultado dells
comando, por lo que internamente se descarta el cambio.antes de eliminar el
m
archivodespués de
m
eliminar el archivofuente
watch -g foo; echo "Something changed!"
. Parece un error extrañamente paralizante en un programa tan establecido.-g
interruptor, pero lo probé en Ubuntu y se comporta igual.Estoy bastante seguro de que buscas herramientas de inotify .
Mi página de manual para ver , de procps-ng , dice
fuente
watch
comportarse como OP y salir con el cambio.watch
comporta de esta manera. Él sabe sobre inotify.