Was ist das Windows-Analogon des Linux-Befehls watch?

58

Ich suche nach einem Windows-Programm / Skript / Befehlszeile-Funktion, die wie Linux- watchProgramm funktioniert .

watch Ruft in regelmäßigen Abständen ein anderes Programm auf und zeigt das Ergebnis an, mit dem sich jede Sekunde eine Ausgabedatei oder ähnliches aktualisieren lässt:

watch cat my-output.txt

oder stärker:

watch grep "fail" my-output.txt

Ich habe es in Cygwins Bibliothek gesucht, aber es scheint nicht vorhanden zu sein.

PeterJCLaw
quelle

Antworten:

14

watchist in Cygwin in dem hierprocps aufgeführten Paket verfügbar (diese Informationen finden Sie über die Paketsuche auf der Website hier ). Ich glaube nicht, dass dieses Paket vom Standard-Cygwin-Setup installiert wird, aber es ist eines, das ich normalerweise bei Neuinstallationen auswähle, um den Befehl watch verfügbar zu haben.

Die Position der Tools in Paketen watchstimmt normalerweise mit den Paketnamen in Linux-Distributionen überein (das Paket enthält auch procps unter Debian und Ubuntu). Wenn die Cygwin-Paketsuchfunktion fehlschlägt, können Informationen zu / von Linux-Distributionen Hinweise liefern.

David Spillett
quelle
47

Schreibe dein Eigenes. Angenommen, die Datei watch.batenthält:

@ECHO OFF
:loop
  cls
  %*
  timeout /t 5 > NUL
goto loop

und rufen Sie es zum Beispiel über:

watch echo test

ertönt testalle 5 Sekunden.

Harrymc
quelle
@Keilaron: Beachte, dass deine Bearbeitung schlecht war und ich sie reparieren musste. Bitte sei vorsichtiger.
Scott
Einfach aber großartig. Vermeidet die Installation von cygwin nur für diesen einzelnen Befehl. Vielen Dank!
Stef
28

Powershell hat den Befehl "while". Sie können es wie in Linux verwenden:

while (1) {your_command; Schlaf 5}

Linux-Version:

während wahr; tun Sie Ihren Befehl; sleep5; getan

Andere:

while ($ true) {netstat -an | findstr 23560; Schlaf 5; Datum}

Mikis
quelle
4
Sie können nur verwenden while (1), weil 1es wahr ist.
TheQuickBrownFox
1
Ich habe auch festgestellt, dass Sie "clear" als letzte Anweisung verwenden können, damit es sich eher wie watch verhält.
Itmuckel
13

Ein generischer Windows-Befehls-Oneliner, um dies zu erreichen:

for /l %g in () do @( echo test & timeout /t 2 )

Ersetzen Sie "Echotest" durch den Befehl, den Sie wiederholt ausführen möchten.

w1mb0r
quelle
Netter, einfacher
Einzeiler
6

Ich habe dieses kleine PowerShell-Modul geschrieben, um das zu tun, wonach Sie gesucht haben. Einfach reinstecken

C:\Users\[username]\Documents\WindowsPowerShell\Modules\Watch

und import-module watchin PowerShell ausführen .


# ---- BEGIN SCRIPT
# Author:       John Rizzo
# Created:      06/12/2014
# Last Updated: 06/12/2014
# Website:      http://www.johnrizzo.net

function Watch {
    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
    param (
        [Parameter(Mandatory=$False,
                   ValueFromPipeline=$True,
                   ValueFromPipelineByPropertyName=$True)]
        [int]$interval = 10,

        [Parameter(Mandatory=$True,
                   ValueFromPipeline=$True,
                   ValueFromPipelineByPropertyName=$True)]
        [string]$command
    )
    process {
        $cmd = [scriptblock]::Create($command);
        While($True) {
            cls;
            Write-Host "Command: " $command;
            $cmd.Invoke();
            sleep $interval;
        }
    }
}

Export-ModuleMember -function Watch

# --- END SCRIPT
johnrizzo1
quelle
1
Sieht ziemlich gut aus, aber ich würde die Funktion dazu ermutigen, im Verb-Noun-Format (z. B. Watch-Command) mit einem Alias ​​von Watch( Set-Alias -Name Watch -item Watch-Command) zu arbeiten.
duct_tape_coder
6

So würde ich es in PowerShell machen:

while(1){ netstat -an|grep 1920;start-sleep -seconds 2;clear }

Die Bedingung while(1)ist äquivalent zu while trueEndlosschleifen.

Klaypigeon
quelle
6

Es ist ein PowerShell One Liner:

while ($true) { <your command here> | Out-Host; Sleep 5; Clear }
ErikW
quelle
Ich würde Clearzuerst setzen .
Sastanin
Es hängt davon ab, wie lange es dauert, bis Ihr Befehl ausgeführt und dann zur Anzeige gebracht wird. Sie können die Reihenfolge ändern, aber dies ist die allgemeine Idee
ErikW
3

Sie können eine Verzögerung auch mit dem PING-Befehl ausgleichen, zum Beispiel:

@echo off
:loop
  cls
  dir c:\temp
  REM 5000mS (5 sec) delay...
  ping 1.1.1.1 -n 1 -w 5000 >NUL
goto loop
Linker3000
quelle
2

Ich hatte das gleiche Problem, als ich die Dateigröße einer Datei überprüfen musste, die gerade von einem anderen Prozess bearbeitet wird. Am Ende habe ich die Funktionalität von watch unter Windows geklont. Die kompilierte Datei sowie der Quellcode sind auf der Site verfügbar.

Achten Sie auf Windows

garrettg84
quelle
1

Ich habe einen Überwachungsbefehl für Windows namens llwatch erstellt.

Der Code ist sowohl auf meiner Website landenlabs.com

und auch auf GitHub

Möglicherweise müssen Sie x64 verwenden, um x64-Programme und x32 für die anderen Programme anzuzeigen. Ich bin nicht sicher, wie wählerisch die Fenster sind.

LanDenLabs
quelle
Nicht sicher, warum dies abgelehnt wurde ... Willkommen bei Super User !
Jpaugh
1

was @harrymc sagte, außer mit sleep watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm Test ausführen

npm run test alle 5 sek

user2167582
quelle
-1

Ich hatte es eilig ... Ich habe einen Vorschlag verwendet und ihn ein wenig geändert, um für mich zu arbeiten:

für / l% g in () do @ (Echotest & Timeout / t 2)

Ich habe es geändert in:

für / l% g in () do @ (test.bat & timeout / t 2)

Und ich habe die Datei test.bat mit der Befehlszeile erstellt. In meinem Fall war es:

Netzgruppe / Domain

Ich habe festgestellt, dass der Echo-Befehl nur auf dem Bildschirm ausgedruckt, aber nicht ausgeführt wurde

Aguilae
quelle