Ich suche nach dem besten Weg, um den Linux-Befehl 'watch' unter Mac OSX zu duplizieren. Ich möchte alle paar Sekunden einen Befehl ausführen, um die Musterübereinstimmung für den Inhalt einer Ausgabedatei mit 'tail' und 'sed' durchzuführen.
Was ist meine beste Option auf einem Mac und kann dies ohne Herunterladen von Software durchgeführt werden?
macos
bash
automation
watch
joseph.hainline
quelle
quelle
Antworten:
Sie können die Grundfunktionalität mit der Shell-Schleife emulieren:
Das wird für immer eine Schleife sein, den Bildschirm löschen, Ihren Befehl ausführen und zwei Sekunden warten - die grundlegende
watch your_command
Implementierung.Sie können noch einen Schritt weiter gehen und ein
watch.sh
Skript erstellen , dasyour_command
undsleep_duration
als Parameter akzeptiert :quelle
your_command
zuyour_command 2>&1|head -10
sleep ${2:-1}
es vor, das Intervall optional zu machen.echo "$(date)"
gleichbedeutend mitdate
?watch
bei mehr als einem Bildschirm. Zeigt nur das Ende an, währendwatch
nur die Oberseite angezeigt wird. (Mit installiertem Homebrew :
brew install watch
quelle
brew
auf einem Mac verwenden.watch
: stackoverflow.com/questions/13593771/…watch
von Brew scheint die Benutzer-Aliase nicht zu lesen. Bei der Ausführungwatch somealias
wird ein Befehl nicht gefunden.watch [command]
wenn Sie es verwenden. Dies setzt vorauswatch somealias
, dasssomealias
es sich um einen Befehl handelt, den Sie in Ihrem Terminal ausführen können.Verwenden Sie Macports :
quelle
watch
Befehl direkt zu verwenden.watch
Befehl in MacPorts ausgeführt?Die obigen Shells reichen aus. Sie können sie sogar in einen Alias konvertieren (möglicherweise müssen Sie eine Funktion einschließen, um Parameter zu verarbeiten).
Beispiele:
Alternativ kann Homebrew die Uhr von http://procps.sourceforge.net/ installieren.
quelle
Es kann sein, dass "beobachten" nicht das ist, was Sie wollen. Sie möchten wahrscheinlich um Hilfe bei der Lösung Ihres Problems bitten, nicht bei der Implementierung Ihrer Lösung! :) :)
Wenn Ihr eigentliches Ziel darin besteht, Aktionen basierend auf dem
tail
Befehl auszulösen , können Sie dies als Teil des Endes selbst tun. Anstatt "periodisch" ausgeführt zu werden,watch
können Sie Ihren Code bei Bedarf ausführen .Beachten Sie, dass
tail -F
eine Protokolldatei auch dann weiter verfolgt wird, wenn sie von newsyslog oder logrotate gedreht wird. Sie möchten dies anstelle der Kleinbuchstaben verwendentail -f
. Überprüfen Sieman tail
auf Details.Wenn Sie jedoch wirklich regelmäßig einen Befehl ausführen möchten, können die anderen Antworten in ein kurzes Shell-Skript umgewandelt werden:
quelle
watch 2 cat *
erweitert die Parameter vor dem Ausführen des Skripts. In einem Verzeichnis mit den Dateien "foo" und "bar" werden Sie alsocat foo bar
alle 2 Sekunden ausgeführt. Welches Verhalten haben Sie erwartet?*
ohne es an den von Ihnen ausgeführten Befehl zu übergeben. Versuchen Sie es:mkdir /tmp/zz; touch /tmp/zz/foo; watch -n 2 ls -l /tmp/zz/*
in einem Fenster. Während das läuft, können Sietouch /tmp/zz/bar
in einem anderen Fenster. Überprüfen Sie im ersten Fenster, ob Ihre "Uhr" die Änderung sieht. Ich glaube nicht. Es ist nicht für mich. Dies hat nichts mit Ubuntu vs OSX oder Linux vs Unix zu tun, es ist das Verhalten vonbash
sich.watch "ls -l /tmp/zz/*"
Wenn Sie jedoch daran denken, Anführungszeichen zu verwenden, funktioniert dies auch mit Ihrem Skript. :)Gehen Sie mit der Antwort von hier :
Aber Sie sind wirklich besser dran , die Uhr zu installieren, da diese nicht sehr sauber ist .
quelle
brew install watch
Wenn watch nicht über installieren möchte
Es gibt eine andere ähnliche / kopierte Version, die für mich perfekt installiert und funktioniert hat
https://github.com/tj/watch
quelle
Oder in Ihrem ~ / .bashrc
quelle
Ich hatte ein ähnliches Problem.
Als ich gegoogelt habe, bin ich kürzlich auf diesen Link gestoßen. Dies ist nicht gerade 'Software installieren', sondern nur die Binärdatei für den Befehl 'watch'.
Und der Link ist Get watch Befehl für OSX
quelle
Hier ist eine leicht geänderte Version dieser Antwort :
Um es zu benutzen:
~/bin/watch
chmod 700 ~/bin/watch
in einem Terminal ausführen , um es ausführbar zu machen.watch 1 echo "hi there"
~ / bin / watch
quelle
Versuche dies:
quelle
Um ein Flackern zu verhindern, wenn Ihr Hauptbefehl eine erkennbare Zeit in Anspruch nimmt, können Sie die Ausgabe erfassen und den Bildschirm erst dann löschen, wenn er fertig ist.
function watch {while :; do a=$($@); clear; echo "$(date)\n\n$a"; sleep 1; done}
dann benutze es von:
watch istats
quelle
Verwenden Sie den nix Paketmanager!
Installieren Sie dann nix
nix-env -iA nixpkgs.watch
und es sollte nach Abschluss der Installationsanweisungen (einschließlich Sourcing. "$HOME/.nix-profile/etc/profile.d/nix.sh"
in Ihrer Shell) zur Verwendung verfügbar sein .quelle