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.

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.


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.


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


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ć.


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

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ść.


6

Jest to jedna wkładka PowerShell:

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

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

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


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.


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



-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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.