mac create crear bashrc bash_profile macos bash automation watch

macos - create - OSX bash, comando ''ver''



macos create alias terminal (12)

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 hacer coincidir 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? ¿Se puede hacer sin descargar software?


Aquí hay una versión ligeramente modificada de esta respuesta que:

  • comprueba si hay argumentos válidos
  • Muestra un título de fecha y duración en la parte superior.
  • mueve el argumento de "duración" para que sea el primer argumento, por lo que los comandos complejos se pueden pasar fácilmente como los argumentos restantes.

Para usarlo:

  • Guarda esto en ~/bin/watch
  • ejecuta chmod 700 ~/bin/watch en una terminal para hacerla ejecutable.
  • pruébalo ejecutando watch 1 echo "hi there"

~ / bin / watch

#!/bin/bash function show_help() { echo "" echo "usage: watch [sleep duration in seconds] [command]" echo "" echo "e.g. To cat a file every second, run the following" echo "" echo " watch 1 cat /tmp/it.txt" exit; } function show_help_if_required() { if [ "$1" == "help" ] then show_help fi if [ -z "$1" ] then show_help fi } function require_numeric_value() { REG_EX=''^[0-9]+$'' if ! [[ $1 =~ $REG_EX ]] ; then show_help fi } show_help_if_required $1 require_numeric_value $1 DURATION=$1 shift while :; do clear echo "Updating every $DURATION seconds. Last updated $(date)" bash -c "$*" sleep $DURATION done


Con Homebrew instalado:

brew install watch


O bien, en tu ~ / .bashrc

function watch { while :; do clear; date; echo; $@; sleep 2; done }


Prueba esto:

#!/bin/bash # usage: watch [-n integer] COMMAND case $# in 0) echo "Usage $0 [-n int] COMMAND" ;; *) sleep=2; ;; esac if [ "$1" == "-n" ]; then sleep=$2 shift; shift fi while :; do clear; echo "$(date) every ${sleep}s $@"; echo $@; sleep $sleep; done


Puede emular la funcionalidad básica con el bucle de shell:

while :; do clear; your_command; sleep 2; done

Se repetirá para siempre, borre la pantalla, ejecute su comando y espere dos segundos: la implementación básica de watch your_command .

Puede llevar esto un paso más allá y crear una watch.sh comandos watch.sh que pueda aceptar your_command y sleep_duration como parámetros:

#!/bin/bash # usage: watch.sh <your_command> <sleep_duration> while :; do clear date $1 sleep $2 done


Puede ser que "ver" 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 comando tail , entonces puede hacerlo como parte de la propia cola. En lugar de ejecutar "periódicamente", que es lo que hace la watch , puede ejecutar su código a pedido .

#!/bin/sh tail -F /var/log/somelogfile | while read line; do if echo "$line" | grep -q ''[Ss]ome.regex''; then # do your stuff fi done

Tenga en cuenta que tail -F continuará siguiendo un archivo de registro incluso si es rotado por newsyslog o logrotate. Quiere usar esto en lugar de la tail -f minúscula tail -f . Compruebe la man tail para más detalles.

Dicho esto, si realmente desea ejecutar un comando periódicamente, las otras respuestas proporcionadas se pueden convertir en un script de shell corto:

#!/bin/sh if [ -z "$2" ]; then echo "Usage: $0 SECONDS COMMAND" >&2 exit 1 fi SECONDS=$1 shift 1 while sleep $SECONDS; do clear $* done


Si el reloj no quiere instalar via

brew install watch

Hay otra versión similar / copia que se instaló y funcionó perfectamente para mí

brew install visionmedia-watch

https://github.com/tj/watch


Tuve un problema similar.

Cuando busqué en Google, encontré este enlace recientemente. Esto no es exactamente ''instalar software'', simplemente obteniendo el binario para el comando ''ver''.

Y el enlace es el comando Get watch para OSX.


Utilizar ports :

$ sudo port install watch


Yendo con la respuesta desde here :

bash -c ''while [ 0 ]; do <your command>; sleep 5; done''

Pero realmente es mejor instalar el reloj ya que esto no es muy limpio ...


los shells de arriba harán el truco, incluso podría convertirlos a un alias (puede que tenga que ajustarse en una función para manejar los parámetros)

alias myWatch=''_() { while :; do clear; $2; sleep $1; done }; _''

Ejemplos:

myWatch 1 ls ## self-explanatory myWatch 5 "ls -lF $HOME" ## every 5 seconds, list out home dir; double-quotes around command to keep its args together

Alternativamente, homebrew puede instalar el reloj desde http://procps.sourceforge.net/

brew install watch


para evitar el parpadeo cuando su comando principal tarda un tiempo perceptible en completarse, puede capturar la salida y solo borrar la pantalla cuando se hace.

function watch {while :; do a=$($@); clear; echo "$(date)/n/n$a"; sleep 1; done}

entonces watch istats por: watch istats