watch-Befehl für macOS selbst bauen (bashrc-Funktion)

watch-Befehl für macOS selbst bauen (bashrc-Funktion)

Unter Linux gehört watch zum festen Repertoire jedes Administrators: Der Befehl wiederholt ein Kommando in konfigurierbaren Abständen und zeigt die Ausgabe kontinuierlich im Terminal an. macOS liefert diesen Befehl nicht standardmäßig mit – doch mit einer einfachen Shell-Funktion in der .bashrc oder .zshrc lässt sich das schnell nachrüsten.

Die watch-Funktion für macOS

Folgende Funktion in die ~/.bashrc (bash) oder ~/.zshrc (zsh, Standard seit macOS Catalina) eintragen:

function watch {
    while :; do
        clear
        date
        echo
        $@
        sleep 2
    done
}

Nach dem Speichern die Datei neu laden:

source ~/.zshrc
# oder für bash:
source ~/.bashrc

Verwendung der Funktion

Die Funktion wird genau wie das Linux-Original verwendet – einfach den gewünschten Befehl als Argument übergeben:

# Freien Speicherplatz alle 2 Sekunden anzeigen
watch df -h

# Netzwerkverbindungen überwachen
watch netstat -an

# Laufende Prozesse überwachen
watch ps aux | grep nginx

# Ping-Ergebnis kontinuierlich zeigen
watch ping -c 1 8.8.8.8

Intervall konfigurierbar machen

Eine erweiterte Version der Funktion erlaubt es, das Aktualisierungsintervall als Parameter anzugeben – analog zur Linux-Option -n:

function watch {
    local interval=2
    if [[ "$1" == "-n" ]]; then
        interval=$2
        shift 2
    fi
    while :; do
        clear
        date
        echo
        $@
        sleep "$interval"
    done
}

Verwendung mit eigenem Intervall:

# Alle 5 Sekunden aktualisieren
watch -n 5 df -h

Alternative: watch über Homebrew installieren

Wer Homebrew installiert hat, kann auch das echte GNU-watch nachinstallieren:

brew install watch

Das bietet dann auch Highlighting-Optionen (-d für Änderungen hervorheben) und weitere Flags aus der Linux-Welt.

Wer regelmäßig zwischen macOS und Linux wechselt, findet unter Linux & Server viele weitere nützliche Kommandozeilen-Tipps. Das Windows-Äquivalent ist im Beitrag Windows Batch Loop beschrieben.