OSX bash, команда 'watch' - PullRequest
       47

OSX bash, команда 'watch'

257 голосов
/ 06 марта 2012

Я ищу лучший способ дублировать команду Linux 'watch' на Mac OSX.Я хотел бы запускать команду каждые несколько секунд для сопоставления с шаблоном содержимого выходного файла, используя tail и sed.

Какой мой лучший вариант для Mac, и можно ли это сделать без загрузки программного обеспечения?

Ответы [ 13 ]

1 голос
/ 14 августа 2015

для предотвращения мерцания, когда ваша основная команда занимает ощутимое время для завершения, вы можете захватить вывод и очистить экран, только когда это будет сделано.

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

затем используйте его: watch istats

1 голос
/ 15 ноября 2014

Попробуйте это:

#!/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
1 голос
/ 07 августа 2014

Вот слегка измененная версия этого ответа , которая:

  • проверяет правильность аргументов
  • показывает заголовок даты и продолжительности вверху
  • перемещает аргумент "duration" в качестве первого аргумента, поэтому сложные команды могут быть легко переданы в качестве оставшихся аргументов.

Для его использования:

  • Сохранить~/bin/watch
  • выполнить chmod 700 ~/bin/watch в терминале, чтобы сделать его исполняемым.
  • попробовать, запустив watch 1 echo "hi there"

~ /корзина / часы

#!/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
...