OSX bash, команда' watch'
Я ищу лучший способ дублировать команду Linux "watch" на Mac OSX. Я хотел бы запускать команду каждые несколько секунд, чтобы сопоставить шаблон с содержимым выходного файла, используя "хвост" и "sed".
что мой лучший вариант на Mac, и можно ли это сделать без загрузки программного обеспечения?
12 ответов:
вы можете эмулировать основную функциональность с помощью цикла оболочки:
while :; do clear; your_command; sleep 2; done
это будет цикл навсегда, очистить экран, запустить команду, и ждать две секунды-основной
watch your_command
реализация.вы можете сделать этот шаг дальше и создать
watch.sh
скрипт, который может приниматьyour_command
иsleep_duration
параметры:#!/bin/bash # usage: watch.sh <your_command> <sleep_duration> while :; do clear date sleep done
С доморощенного установлено:
brew install watch
использовать порты:
$ sudo port install watch
вышеприведенные оболочки сделают трюк, вы даже можете преобразовать их в псевдоним (возможно, потребуется обернуть в функцию для обработки параметров)
alias myWatch='_() { while :; do clear; ; sleep ; done }; _'
примеры:
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
поочередно, доморощенный может установить часы от http://procps.sourceforge.net/
brew install watch
это может быть, что "смотреть" - это не то, что вы хотите. Вы, вероятно, хотите обратиться за помощью в решении вашей проблемы, а не в реализации вашего решения! :)
если ваша настоящая цель-это триггер действия, основанные на том, что видно из
tail
команда, то вы можете сделать это, как часть себя хвост. Вместо того, чтобы работать "периодически", который является то, чтоwatch
делает, вы можете запустить свой код по требованию.#!/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
отметим, что
tail -F
будет продолжайте следить за файлом журнала, даже если он вращается с помощью newsyslog или logrotate. Вы хотите использовать это вместо нижнего регистраtail -f
. Проверьтеman tail
для сведения.тем не менее, если вы действительно хотите периодически выполнять команды также может быть превращен в короткий shell-скрипт:
#!/bin/sh if [ -z "" ]; then echo "Usage: SECONDS COMMAND" >&2 exit 1 fi SECONDS= shift 1 while sleep $SECONDS; do clear $* done
идем с ответом от здесь:
bash -c 'while [ 0 ]; do <your command>; sleep 5; done'
но тебе действительно лучше установка смотреть как это не очень очистить..
если часы не хотят устанавливать через
brew install watch
есть еще одна подобная / копия версия, которая установлена и отлично работает для меня
brew install visionmedia-watch
У меня была похожая проблема.
когда я гуглил, я недавно наткнулся на эту ссылку. Это не совсем "установка программного обеспечения", просто получение двоичной команды "watch".
и ссылка получить команду watch для OSX
вот немного измененная версия этого ответа что:
- проверяет наличие действительного аргумента
- показывает название даты и продолжительности в верхней части
- перемещает аргумент "длительность" в качестве первого аргумента, поэтому сложные команды могут быть легко переданы в качестве остальных аргументов.
использовать:
- сохранить это
~/bin/watch
- выполнить
chmod 700 ~/bin/watch
в терминале, чтобы сделать его выполнимый.- попробуйте работает
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 [ "" == "help" ] then show_help fi if [ -z "" ] then show_help fi } function require_numeric_value() { REG_EX='^[0-9]+$' if ! [[ =~ $REG_EX ]] ; then show_help fi } show_help_if_required require_numeric_value DURATION= shift while :; do clear echo "Updating every $DURATION seconds. Last updated $(date)" bash -c "$*" sleep $DURATION done