Je cherche le meilleur moyen de dupliquer la commande Linux 'watch' sur Mac OSX. Je voudrais exécuter une commande toutes les quelques secondes pour faire correspondre les motifs au contenu d'un fichier de sortie en utilisant «tail» et «sed».
Quelle est ma meilleure option sur un Mac et peut-elle être effectuée sans télécharger de logiciel?
macos
bash
automation
watch
joseph.hainline
la source
la source
Réponses:
Vous pouvez émuler la fonctionnalité de base avec la boucle shell:
Cela bouclera pour toujours, effacera l'écran, exécutera votre commande et attendra deux secondes - l'
watch your_command
implémentation de base .Vous pouvez aller plus loin et créer un
watch.sh
script pouvant accepteryour_command
etsleep_duration
comme paramètres:la source
your_command
your_command 2>&1|head -10
sleep ${2:-1}
rendre l'intervalle facultatif.echo "$(date)"
équivalent àdate
?watch
lorsque la sortie est composée de plusieurs écrans. Ne montre que la fin, alors quewatch
ne montre que le haut. (Ni l'un ni l'autre n'est idéal)Avec Homebrew installé:
brew install watch
la source
brew
sur Mac.watch
: stackoverflow.com/questions/13593771/…watch
de brew ne semble pas lire les alias des utilisateurs. Lors de l'exécutionwatch somealias
, j'obtiens une commande introuvable.watch [command]
lorsque vous l'utilisezwatch somealias
en supposant quesomealias
c'est une commande que vous pouvez exécuter dans votre terminal.Utilisez macports :
la source
watch
directement la commande.watch
commande est-elle supprimée dans MacPorts?les shells ci-dessus feront l'affaire, vous pouvez même les convertir en alias (vous devrez peut-être envelopper une fonction pour gérer les paramètres)
Exemples:
Alternativement, homebrew peut installer la montre depuis http://procps.sourceforge.net/
la source
Il se peut que "regarder" ne soit pas ce que vous voulez. Vous voudrez probablement demander de l'aide pour résoudre votre problème, pas pour implémenter votre solution! :)
Si votre véritable objectif est de déclencher des actions en fonction de ce qui est vu à partir de la
tail
commande , vous pouvez le faire dans le cadre de la queue elle-même. Au lieu d'exécuter "périodiquement", ce qui est lewatch
cas, vous pouvez exécuter votre code à la demande .Notez que
tail -F
continuera à suivre un fichier journal même s'il est tourné par newsyslog ou logrotate. Vous souhaitez utiliser ceci au lieu des minusculestail -f
. Vérifiez lesman tail
détails.Cela dit, si vous voulez vraiment exécuter une commande périodiquement, les autres réponses fournies peuvent être transformées en un script shell court:
la source
watch 2 cat *
développerait les paramètres avant d'exécuter le script, donc dans un répertoire avec les fichiers "foo" et "bar", vous vous exécuteriezcat foo bar
toutes les 2 secondes. À quel comportement vous attendiez-vous?*
sans le passer à la commande que vous exécutez. Essayez de courir:mkdir /tmp/zz; touch /tmp/zz/foo; watch -n 2 ls -l /tmp/zz/*
dans une seule fenêtre. Pendant que cela fonctionne, vous pouveztouch /tmp/zz/bar
dans une autre fenêtre. Voyez si votre "montre" voit le changement, dans la première fenêtre. Je ne pense pas que ce sera le cas. Ce n'est pas pour moi. Cela n'a rien à voir avec Ubuntu vs OSX ou Linux vs Unix, c'est le comportement debash
lui - même.watch "ls -l /tmp/zz/*"
mais si vous vous souvenez d'utiliser des guillemets, cela fonctionne également avec votre script. :)Aller avec la réponse d' ici :
Mais il vaut mieux installer la montre car ce n'est pas très propre ..
la source
brew install watch
Si la montre ne souhaite pas installer via
Il y a une autre version similaire / copie qui a installé et a fonctionné parfaitement pour moi
https://github.com/tj/watch
la source
Ou, dans votre ~ / .bashrc
la source
J'avais un problème similaire.
Quand j'ai googlé, je suis tombé sur ce lien récemment. Ce n'est pas exactement «installer le logiciel», obtenir simplement la commande binaire pour «regarder».
Et le lien est Get watch command for OSX
la source
Voici une version légèrement modifiée de cette réponse :
Pour l'utiliser:
~/bin/watch
chmod 700 ~/bin/watch
dans un terminal pour le rendre exécutable.watch 1 echo "hi there"
~ / bin / watch
la source
Essaye ça:
la source
pour éviter le scintillement lorsque votre commande principale prend un temps perceptible, vous pouvez capturer la sortie et effacer l'écran uniquement lorsqu'elle est terminée.
function watch {while :; do a=$($@); clear; echo "$(date)\n\n$a"; sleep 1; done}
puis utilisez-le par:
watch istats
la source
Utilisez le gestionnaire de paquets nix !
Installez nix,
nix-env -iA nixpkgs.watch
et il devrait être disponible pour utilisation après avoir terminé les instructions d'installation (y compris l'approvisionnement. "$HOME/.nix-profile/etc/profile.d/nix.sh"
dans votre shell).la source