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_command
implementación básica .Puede llevar esto un paso más allá y crear un
watch.sh
script que pueda aceptaryour_command
ysleep_duration
como parámetros:fuente
your_command
ayour_command 2>&1|head -10
sleep ${2:-1}
que el intervalo sea opcional.echo "$(date)"
equivalente adate
?watch
cuando la salida es más de una pantalla. Solo muestra el final, mientras quewatch
solo muestra la parte superior. (Ninguno de los dos es ideal)Con Homebrew instalado:
brew install watch
fuente
brew
en Mac.watch
: stackoverflow.com/questions/13593771/…watch
de brew no parece leer los alias de usuario. Al ejecutarwatch somealias
, recibo un comando no encontrado.watch [command]
cuando lo usaswatch somealias
, suponiendo quesomealias
es un comando que puedes ejecutar en tu terminal.Utiliza macports :
fuente
watch
comando directamente.watch
comando 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
tail
comando , puede hacerlo como parte de la cola misma. En lugar de ejecutar "periódicamente", que es lo quewatch
hace, puede ejecutar su código a pedido .Tenga en cuenta que
tail -F
seguirá un archivo de registro incluso si se rota por newsyslog o logrotate. Desea usar esto en lugar de las minúsculastail -f
. Consultarman tail
para 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 bar
cada 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/bar
en 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 enbash
sí 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 watch
Si 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/watch
chmod 700 ~/bin/watch
en 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 istats
fuente
¡Usa el administrador de paquetes nix !
Instale nix, entonces,
nix-env -iA nixpkgs.watch
y 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