472 Stimmen

OS X Bash, Befehl 'watch'

Ich bin auf der Suche nach dem besten Weg, den Linux-Befehl "watch" auf Mac OS X zu duplizieren. Ich möchte alle paar Sekunden einen Befehl ausführen, um den Inhalt einer Ausgabedatei mit "tail" und "sed" nach Mustern zu durchsuchen.

Was ist die beste Option auf einem Mac, und geht das auch ohne Software-Download?

1voto

Brad Parks Punkte 59613

Hier ist eine leicht veränderte Version dieser Antwort das:

  • prüft auf gültige Argumente
  • zeigt oben ein Datum und einen Titel für die Dauer an
  • verschiebt das Argument "Dauer" auf das 1. Argument, so dass komplexe Befehle leicht als die übrigen Argumente übergeben werden können.

Zur Verwendung:

  • Speichern Sie dies in ~/bin/watch
  • ausführen. chmod 700 ~/bin/watch in einem Terminal, um es ausführbar zu machen.
  • Probieren Sie es aus, indem Sie 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 [ "$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

1voto

galva Punkte 1173

Verwenden Sie die Nix Paketmanager!

Installieren Sie Nix, und führen Sie dann nix-env -iA nixpkgs.watch und sollte nach Beendigung der Installationsanweisungen (einschließlich der Beschaffung von Ressourcen) zur Verfügung stehen. . "$HOME/.nix-profile/etc/profile.d/nix.sh" in Ihrer Shell).

0voto

Andrew Punkte 3305

Le site watch Befehl, der unter Linux verfügbar ist, gibt es nicht unter macOS . Wenn Sie nicht verwenden möchten brew können Sie diese Bash-Funktion zu Ihrem Shell-Profil hinzufügen.

# execute commands at a specified interval of seconds
function watch.command {
  # USAGE: watch.commands [seconds] [commands...]
  # EXAMPLE: watch.command 5 date
  # EXAMPLE: watch.command 5 date echo 'ls -l' echo 'ps | grep "kubectl\\\|node\\\|npm\\\|puma"'
  # EXAMPLE: watch.command 5 'date; echo; ls -l; echo; ps | grep "kubectl\\\|node\\\|npm\\\|puma"' echo date 'echo; ls -1'
  local cmds=()
  for arg in "${@:2}"; do
    echo $arg | sed 's/; /;/g' | tr \; \\n | while read cmd; do
      cmds+=($cmd)
    done
  done
  while true; do
    clear
    for cmd in $cmds; do
      eval $cmd
    done
    sleep $1
  done
}

https://gist.github.com/Gerst20051/99c1cf570a2d0d59f09339a806732fd3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X