Какой Windows-аналог команды Linux watch?

58

Я ищу программу Windows / скрипт / функцию командной строки, которая работает как watchпрограмма Linux .

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

watch cat my-output.txt

или, более сильно:

watch grep "fail" my-output.txt

Я искал его в библиотеке Cygwin, но, похоже, его нет.

PeterJCLaw
источник

Ответы:

14

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

Расположение инструментов в пакетах обычно совпадает с именами пакетов в дистрибутивах Linux (пакет содержит также watchprocps в Debian и Ubuntu), поэтому, если функция поиска пакетов Cygwin не сработает, информация для / из дистрибутивов Linux может дать подсказки.

Дэвид Спиллетт
источник
47

Напиши свое. Допустим, файл watch.batсодержит:

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

и позвоните через, например:

watch echo test

будет звучать testкаждые 5 секунд.

harrymc
источник
@Keilaron: обратите внимание, что ваше редактирование было плохим, и мне пришлось это исправить. Пожалуйста, будьте осторожнее.
Скотт
Просто, но здорово. Избегает установки Cygwin только для этой единственной команды. Вилен Данк!
Стеф
28

У Powershell есть команда while. Вы можете использовать его как в Linux:

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

Версия для Linux:

пока правда; сделать вашу_команду; sleep5; сделанный

Другие:

while ($ true) {netstat -an | findstr 23560; спать 5; свидание}

Mikis
источник
4
Вы можете просто использовать while (1), потому что 1это правда.
TheQuickBrownFox
1
Я также обнаружил, что вы можете использовать «очистить» в качестве последнего утверждения, так что оно ведет себя больше как часы.
Itmuckel
13

Общая команда Windows oneliner для этого:

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

Замените «эхо-тест» на команду, которую вы хотите выполнить повторно.

w1mb0r
источник
хороший, простой вкладыш, который делает
свое дело
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
johnrizzo1
источник
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, зацикливаясь бесконечно.

klaypigeon
источник
6

Это PowerShell один вкладыш:

while ($true) { <your command here> | Out-Host; Sleep 5; Clear }
ErikW
источник
Я бы поставил 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
Linker3000
источник
2

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

смотреть для Windows

garrettg84
источник
1

Я создал команду наблюдения для окон под названием llwatch.

Код есть и на моем сайте landenlabs.com

а также на GitHub

Возможно, вам придется использовать x64 для просмотра программ x64 и x32 для других. Не уверен, насколько придирчивы окна.

LanDenLabs
источник
Не уверен, почему это было отклонено ... Добро пожаловать в Super User !
jpaugh
1

что сказал @harrymc за исключением сна watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm run test

npm run test каждые 5 секунд

user2167582
источник
-1

Я спешил .... Я использовал одно предложение и немного изменил его, чтобы работать на меня:

for / l% g in () do @ (эхо-тест и тайм-аут / t 2)

Я изменил это на:

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

И я создал файл test.bat с командной строкой. В моем случае это было:

сетевая группа / домен

Я обнаружил, что команда echo просто распечатала на экране, но не выполнила команду

aguilae
источник