Що таке аналог Windows для команди watch Linux?


58

Я шукаю програму / сценарій / командний рядок для Windows, яка працює як watchпрограма Linux .

watch періодично викликає іншу програму / що завгодно і показує результат, який відмінно підходить для оновлення вихідного файлу або подібного щосекунди:

watch cat my-output.txt

або, більш потужно:

watch grep "fail" my-output.txt

Я шукав його в бібліотеці cygwin, але, схоже, його немає.

Відповіді:


14

watchдоступний у Cygwin, в procpsупаковці, як зазначено тут (цю інформацію можна знайти за допомогою пошуку пакета на веб-сайті, тут ). Я не думаю, що цей пакет встановлений за замовчуванням у налаштуваннях cygwin, але це зазвичай той, який я вибираю під час нового встановлення, щоб мати доступну команду watch.

Розташування інструментів у пакунках зазвичай відповідає назвам пакетів у дистрибутивах Linux (пакунок, що містить watchпропс на Debian і Ubuntu), тому, якщо функція пошуку пакету Cygwin відмовить від вас, інформація про / з дистрибутивів Linux може запропонувати підказки.


47

Напишіть своє. Скажімо, файл watch.batмістить:

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

і зателефонуйте через, наприклад:

watch echo test

лунатиме testкожні 5 секунд.


@Keilaron: Зауважте, що ваша редакція була поганою, і я повинен був виправити це. Будьте уважнішими.
Скотт

Простий, але чудовий. Уникає встановлення cygwin саме для цієї єдиної команди. Вілен Данк!
Стеф

28

У Powershell є команда "while". Ви можете використовувати його як у Linux:

while (1) {your_command; сон 5}

Версія Linux:

поки правда; зробіть свій_команд; сон5; зроблено

Інші:

while ($ true) {netstat -an | findstr 23560; сон 5; дата}


4
Ви можете просто використовувати while (1), тому що 1це truthy.
TheQuickBrownFox

1
Я також виявив, що ви можете використовувати "чітке" як останнє твердження, тож воно поводиться більше як дивитися.
itmuckel

13

Загальна команда Windows oneliner для цього:

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

Замініть "ехо-тест" на команду, яку потрібно повторити.


приємний, простий один лайнер, який виконує трюк
user230910

6

Я написав цей маленький модуль PowerShell, щоб робити те, що ви шукали. Просто покладіть його

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

і запускати import-module watchв 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
Виглядає досить добре, але я б закликав функцію бути у форматі іменника дієслова (наприклад Watch-Command) з псевдонімом Watch( Set-Alias -Name Watch -item Watch-Command).
duct_tape_coder

6

Ось як я це зробив би в PowerShell:

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

Умова while(1)рівнозначна while true, циклічно нескінченно.


6

Це один вкладиш PowerShell:

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

Я ставлю Clearпершим.
зустріч

це залежить від того, скільки часу запускає ваша команда, а потім виводиться на дисплей .... ви можете змінити порядок, але це загальна ідея
ErikW

3

Ви також можете зробити затримку за допомогою команди PING, наприклад:

@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

У мене була така ж проблема, коли потрібно було перевірити розмір файлу, над яким активно працює інший процес. Я закінчив клонування функціональності годинника в Windows. Складений exe, а також джерело доступні на сайті.

спостерігати за Windows


1

Я створив команду watch для Windows під назвою llwatch.

Код є на моєму сайті landenlabs.com

а також на GitHub

Можливо, вам потрібно буде використовувати x64 для перегляду програм x64 та x32 для інших. Не знаєте, наскільки вибагливі вікна.


Не впевнений, чому це було знято ... Ласкаво просимо до Супер Користувача !
jpaugh

1

що сказав @harrymc, окрім сну watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat тест запуску npm

npm run test кожні 5 сек



-1

Я поспішав .... Я скористався однією пропозицією і трохи змінив її, щоб працювати на мене:

для / l% g в () do @ (ехо-тест & timeout / t 2)

Я змінив його на:

для / l% g в () do @ (test.bat & timeout / t 2)

І я створив файл test.bat з командним рядком. У моєму випадку це було:

чиста група / домен

Я виявив, що команда echo просто надрукувалась на екран, але не виконала команду

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.