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.