Estoy buscando la mejor manera de duplicar el comando 'watch' de Linux en Mac OSX. Me gustaría ejecutar un comando cada pocos segundos para que coincida el patrón en el contenido de un archivo de salida usando 'tail' y 'sed'.
¿Cuál es mi mejor opción en una Mac, y se puede hacer sin descargar software?
                    
                        macos
                                bash
                                automation
                                watch
                                
                    
                    
                        joseph.hainline
fuente
                
                fuente

Respuestas:
Puede emular la funcionalidad básica con el bucle de shell:
Eso se repetirá para siempre, borrará la pantalla, ejecutará su comando y esperará dos segundos: la
watch your_commandimplementación básica .Puede llevar esto un paso más allá y crear un
watch.shscript que pueda aceptaryour_commandysleep_durationcomo parámetros:fuente
your_commandayour_command 2>&1|head -10sleep ${2:-1}que el intervalo sea opcional.echo "$(date)"equivalente adate?watchcuando la salida es más de una pantalla. Solo muestra el final, mientras quewatchsolo muestra la parte superior. (Ninguno de los dos es ideal)Con Homebrew instalado:
brew install watchfuente
brewen Mac.watch: stackoverflow.com/questions/13593771/…watchde brew no parece leer los alias de usuario. Al ejecutarwatch somealias, recibo un comando no encontrado.watch [command]cuando lo usaswatch somealias, suponiendo quesomealiases un comando que puedes ejecutar en tu terminal.Utiliza macports :
fuente
watchcomando directamente.watchcomando está roto en MacPorts?los shells anteriores harán el truco, incluso podría convertirlos en un alias (puede que necesite envolver en una función para manejar parámetros)
Ejemplos:
Alternativamente, homebrew puede instalar el reloj desde http://procps.sourceforge.net/
fuente
Puede ser que "mirar" no sea lo que quieres. ¡Probablemente quiera pedir ayuda para resolver su problema, no para implementar su solución! :)
Si su objetivo real es desencadenar acciones basadas en lo que se ve desde el
tailcomando , puede hacerlo como parte de la cola misma. En lugar de ejecutar "periódicamente", que es lo quewatchhace, puede ejecutar su código a pedido .Tenga en cuenta que
tail -Fseguirá un archivo de registro incluso si se rota por newsyslog o logrotate. Desea usar esto en lugar de las minúsculastail -f. Consultarman tailpara más detalles.Dicho esto, si realmente desea ejecutar un comando periódicamente, las otras respuestas proporcionadas se pueden convertir en un breve script de shell:
fuente
watch 2 cat *expandiría los parámetros antes de ejecutar el script, por lo que en un directorio con los archivos "foo" y "bar", se ejecutaríacat foo barcada 2 segundos. ¿Qué comportamiento estabas esperando?*sin pasarlo al comando que ejecuta. Intenta correr:mkdir /tmp/zz; touch /tmp/zz/foo; watch -n 2 ls -l /tmp/zz/*en una ventana. Mientras se está ejecutando, puedes hacerlotouch /tmp/zz/baren otra ventana. Vea si su "reloj" ve el cambio, en la primera ventana. No creo que lo haga. No es para mi. Esto no tiene nada que ver con Ubuntu vs OSX o Linux vs Unix, es el comportamiento enbashsí mismo.watch "ls -l /tmp/zz/*"pero si recuerda usar comillas, también funciona con su script. :)Yendo con la respuesta desde aquí :
Pero es mejor que instales el reloj ya que esto no es muy limpio .
fuente
brew install watchSi watch no quiere instalar a través de
Hay otra versión similar / copia que se instaló y funcionó perfectamente para mí.
https://github.com/tj/watch
fuente
O, en tu ~ / .bashrc
fuente
Tuve un problema similar.
Cuando busqué en Google, me encontré con este enlace recientemente. Esto no es exactamente 'instalar software', simplemente obtener el binario para el comando 'watch'.
Y el enlace es el comando Obtener reloj para OSX
fuente
Aquí hay una versión ligeramente modificada de esta respuesta que:
Para usarlo:
~/bin/watchchmod 700 ~/bin/watchen una terminal para hacerlo ejecutable.watch 1 echo "hi there"~ / bin / watch
fuente
Prueba esto:
fuente
Para evitar el parpadeo cuando su comando principal tarda un tiempo perceptible en completarse, puede capturar la salida y solo borrar la pantalla cuando esté listo.
function watch {while :; do a=$($@); clear; echo "$(date)\n\n$a"; sleep 1; done}luego úsalo por:
watch istatsfuente
¡Usa el administrador de paquetes nix !
Instale nix, entonces,
nix-env -iA nixpkgs.watchy debería estar disponible para su uso después de completar las instrucciones de instalación (incluido el abastecimiento. "$HOME/.nix-profile/etc/profile.d/nix.sh"en su shell).fuente