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.

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.


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.


@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}


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.


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

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.


6

Es ist ein PowerShell One Liner:

while ($true) { <your command here> | Out-Host; Sleep 5; Clear }

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

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


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.


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



-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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.