Я ищу лучший способ дублировать команду Linux 'watch' на Mac OSX. Я хотел бы запускать команду каждые несколько секунд для сопоставления с шаблоном содержимого выходного файла с использованием «tail» и «sed».
Какой мой лучший вариант на Mac, и можно ли это сделать без загрузки программного обеспечения?
macos
bash
automation
watch
joseph.hainline
источник
источник
Ответы:
Вы можете эмулировать основные функции с помощью цикла оболочки:
Это зациклится навсегда, очистит экран, выполнит команду и подождет две секунды - базовая
watch your_command
реализация.Вы можете сделать этот шаг дальше и создать
watch.sh
скрипт, который может приниматьyour_command
и вsleep_duration
качестве параметров:источник
your_command
наyour_command 2>&1|head -10
sleep ${2:-1}
сделать интервал необязательным.echo "$(date)"
эквивалентноdate
?watch
когда на выходе более одного экрана. Показывает только конец, аwatch
показывает только верх. (Ни один из них не идеален)С Homebrew установлено:
brew install watch
источник
brew
на Mac.watch
: stackoverflow.com/questions/13593771/…watch
от brew, кажется, не читает псевдонимы пользователя. При выполненииwatch somealias
я получаю команду не найдена.watch [command]
когда выwatch somealias
его используете, предполагая, чтоsomealias
это команда, которую вы можете запустить в своем терминале.Используйте macports :
источник
watch
команду напрямую.watch
лопнула команда в MacPorts?вышеприведенные оболочки сделают свое дело, вы даже можете преобразовать их в псевдоним (возможно, потребуется обернуть в функцию для обработки параметров)
Примеры:
Кроме того, доморощенный может установить часы из http://procps.sourceforge.net/
источник
Может быть, что «часы» не то, что вы хотите. Вы, вероятно, хотите обратиться за помощью в решении вашей проблемы, а не в реализации вашего решения! :)
Если вашей реальной целью является запуск действий на основе того, что видно из
tail
команды , то вы можете сделать это как часть самого хвоста. Вместо того, чтобы запускать «периодически», что иwatch
происходит, вы можете запускать свой код по требованию .Обратите внимание, что он
tail -F
будет продолжать следовать за файлом журнала, даже если он будет повернут новостным журналом или logrotate. Вы хотите использовать это вместо строчныхtail -f
. Проверьтеman tail
детали.Тем не менее, если вы действительно хотите периодически запускать команду, другие предоставленные ответы можно превратить в короткий сценарий оболочки:
источник
watch 2 cat *
будет расширять параметры перед запуском скрипта, поэтому в каталоге с файлами «foo» и «bar» вы будете запускатьсяcat foo bar
каждые 2 секунды. Какое поведение вы ожидали?*
не передавая его команде, которую вы запускаете. Попробуйте запустить:mkdir /tmp/zz; touch /tmp/zz/foo; watch -n 2 ls -l /tmp/zz/*
в одном окне. Пока он работает, вы можетеtouch /tmp/zz/bar
в другом окне. Посмотрите, видят ли ваши «часы» изменения в первом окне. Я не думаю, что это будет. Это не для меня. Это не имеет ничего общего с Ubuntu против OSX или Linux против Unix, это поведениеbash
само по себе.watch "ls -l /tmp/zz/*"
но если вы не забываете использовать кавычки, она работает и с вашим скриптом. :)Собираюсь с ответом отсюда :
Но вам действительно лучше установить часы, так как они не очень чистые .
источник
brew install watch
Если часы не хотят устанавливать через
Есть другая аналогичная / копия версия, которая установлена и отлично работает для меня
https://github.com/tj/watch
источник
Или в вашем ~ / .bashrc
источник
У меня была похожая проблема.
Когда я гуглил, недавно наткнулся на эту ссылку. Это не совсем «установка программного обеспечения», просто получение двоичного кода для команды «смотреть».
И ссылка Get Get команда для OSX
источник
Вот слегка измененная версия этого ответа :
Чтобы использовать это:
~/bin/watch
chmod 700 ~/bin/watch
в терминале, чтобы сделать его исполняемым.watch 1 echo "hi there"
~ / Бен / смотреть
источник
Попробуй это:
источник
чтобы предотвратить мерцание, когда ваша основная команда занимает заметное время, вы можете захватить вывод и очистить экран только после того, как это будет сделано.
function watch {while :; do a=$($@); clear; echo "$(date)\n\n$a"; sleep 1; done}
затем используйте его:
watch istats
источник
Используйте менеджер пакетов nix !
Установите nix, затем
nix-env -iA nixpkgs.watch
он должен быть доступен для использования после выполнения инструкций по установке (включая поиск. "$HOME/.nix-profile/etc/profile.d/nix.sh"
в вашей оболочке).источник