Co to jest analog Windows w poleceniu obserwowania Linuksa?

58

Szukam programu / skryptu / funkcji wiersza polecenia systemu Windows, który działa jak watchprogram systemu Linux .

watch okresowo wywołuje inny program / cokolwiek i pokazuje wynik, co jest świetne do odświeżania pliku wyjściowego lub podobnego co sekundę:

watch cat my-output.txt

lub mocniej:

watch grep "fail" my-output.txt

Szukałem tego w bibliotece cygwina, ale wydaje się, że nie jest obecny.

PeterJCLaw
źródło

Odpowiedzi:

14

watchjest dostępny w Cygwin, w procpspaczce wymienionej tutaj (informacje te można znaleźć poprzez wyszukiwanie pakietów na stronie internetowej, tutaj ). Nie sądzę, aby ten pakiet był instalowany przez domyślną konfigurację cygwin, ale zwykle wybieram go w nowych instalacjach, aby mieć dostępną komendę watch.

Lokalizacja narzędzi w pakietach zwykle odpowiada nazwom pakietów w dystrybucjach Linuksa (pakiet zawiera także watchprocps na Debianie i Ubuntu), więc jeśli funkcja wyszukiwania pakietów Cygwin Cię zawiedzie, informacje dla / z dystrybucji Linuksa mogą dostarczyć wskazówek.

David Spillett
źródło
47

Napisz swoje własne. Powiedzmy, że plik watch.batzawiera:

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

i zadzwoń, na przykład:

watch echo test

rozbrzmiewa testco 5 sekund.

harrymc
źródło
@Keilaron: Pamiętaj, że twoja edycja była zła i musiałem to naprawić. Proszę być bardziej ostrożnym.
Scott
Proste, ale świetne. Unika instalowania programu cygwin tylko dla tego pojedynczego polecenia. Vielen Dank!
Stef
28

Program Powershell ma polecenie „while”. Możesz go używać jak w systemie Linux:

while (1) {twoje_komenda; spać 5}

Wersja Linux:

chociaż prawda; wykonaj swoją komendę; spać 5; gotowy

Inne:

while ($ true) {netstat -an | findstr 23560; spać 5; data}

Mikis
źródło
4
Możesz po prostu użyć while (1), bo 1to prawda.
TheQuickBrownFox
1
Odkryłem również, że możesz użyć „wyczyść” jako ostatniego zdania, więc zachowuje się bardziej jak zegarek.
itmuckel,
13

Ogólny oneliner polecenia systemu Windows, aby to osiągnąć:

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

Zamień „test echa” na polecenie, które chcesz wielokrotnie uruchamiać.

w1mb0r
źródło
fajny, prosty liniowiec, który
załatwia sprawę
6

Napisałem ten mały moduł PowerShell, aby zrobić to, czego szukałeś. Po prostu włóż to

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

i uruchom import-module watchw PowerShell.


# ---- 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
źródło
1
Wygląda całkiem nieźle, ale zachęciłbym funkcję do bycia w formacie Czasownik-Rzeczownik (np. Watch-Command) Z aliasem Watch( Set-Alias -Name Watch -item Watch-Command).
duct_tape_coder
6

Oto jak bym to zrobił w PowerShell:

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

Warunek while(1)jest równoznaczny z while truezapętleniem w nieskończoność.

klaypigeon
źródło
6

Jest to jedna wkładka PowerShell:

while ($true) { <your command here> | Out-Host; Sleep 5; Clear }
ErikW
źródło
Postawiłbym na Clearpierwszym miejscu.
sastanin
zależy to od czasu uruchomienia polecenia, a następnie wyświetlenia na ekranie .... możesz zmienić kolejność, ale to jest ogólny pomysł
ErikW
3

Opóźnienie można również uzupełnić za pomocą polecenia PING, na przykład:

@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
źródło
2

Miałem ten sam problem, gdy musiałem sprawdzić rozmiar pliku, nad którym aktywnie pracuje inny proces. W końcu sklonowałem funkcjonalność zegarka w systemie Windows. Skompilowany plik exe oraz źródło są dostępne na stronie.

uważaj na Windows

garrettg84
źródło
1

Utworzyłem polecenie obserwowania dla systemu Windows o nazwie llwatch.

Kod znajduje się na mojej stronie landenlabs.com

a także na GitHub

Może być konieczne użycie x64 do oglądania programów x64 i x32 dla innych. Nie jestem pewien, jak wybredne są okna.

LanDenLabs
źródło
Nie jestem pewien, dlaczego zostało to zanegowane ... Witamy w Super User !
jpaugh
1

co powiedział @harrymc z wyjątkiem snu watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm run test

npm run test co 5 sekund

użytkownik2167582
źródło
-1

Spieszyłem się ... skorzystałem z jednej sugestii i nieco ją zmieniłem, aby dla mnie działała:

dla / l% g in () do @ (test echa i limit czasu / t 2)

Zmieniłem to na:

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

I utworzyłem plik test.bat za pomocą wiersza polecenia. W moim przypadku było to:

grupa / domena netto

Odkryłem, że polecenie echa właśnie wydrukowało się na ekranie, ale nie wykonało polecenia

aguilae
źródło