O que é o análogo do Windows do comando watch do Linux?

47

Estou procurando uma função de programa / script / linha de comando do Windows que funcione como o programa watch do Linux.

watch chama periodicamente outro programa / o que quer que seja e mostra o resultado, ótimo para atualizar um arquivo de saída ou semelhante a cada segundo:

watch cat my-output.txt

ou, mais poderosamente:

watch grep "fail" my-output.txt

Procurei na biblioteca do cygwin, mas ela não parece estar presente.

    
por PeterJCLaw 21.09.2010 / 13:30

13 respostas

12

watch está disponível no Cygwin, no pacote procps conforme listado aqui (esta informação pode ser encontrada através da pesquisa de pacotes no site, aqui ). Eu não acho que este pacote é instalado pela configuração padrão do cygwin, mas é um que eu costumo selecionar em novas instalações para ter o comando watch disponível.

A localização de ferramentas em pacotes geralmente combina nomes de pacotes em distribuições Linux (o pacote contendo watch é procps no Debian e Ubuntu também) então se a função de busca de pacotes do Cygwin falhar você, informações para / de distribuições Linux podem oferecer pistas .

    
por 21.09.2010 / 14:22
31

Escreva o seu. Digamos que o arquivo watch.bat contenha:

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

e ligue, por exemplo:

watch echo test

ecoará test a cada 5 segundos.

    
por 21.09.2010 / 13:43
19

Powershell tem o comando "while". Você pode usá-lo como no Linux:

while (1) {your_command; sleep 5}

Versão do Linux:

while true; do your_command; sleep5; done

Outros:

while ($true) {netstat -an | findstr 23560; sleep 5; date}

    
por 20.09.2013 / 17:02
8

Um oneliner de comando genérico do Windows para fazer isso:

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

Substitua "teste de eco" pelo comando que você deseja executar repetidamente.

    
por 10.01.2017 / 10:29
5

Eu escrevi este pequeno módulo PowerShell para fazer o que você estava procurando. Basta colocar em

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

e execute import-module watch no 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
    
por 12.06.2014 / 20:55
5

É assim que eu faria no PowerShell:

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

A condição while(1) é equivalente a while true , loop indefinidamente.

    
por 04.06.2014 / 19:55
4

É um forro do PowerShell:

do { <your command here> | Out-Host; Sleep 5; Clear } while ($true)
    
por 09.01.2017 / 20:03
3

Você também pode fazer um atraso usando o comando PING, por exemplo:

@echo off
:loop
  cls
  dir c:\temp
  REM 5000mS (5 sec) delay...
  ping 1.1.1.1 -n 1 -w 5000 >NUL
goto loop
    
por 21.09.2010 / 13:56
2

Eu tive o mesmo problema quando precisei verificar o tamanho do arquivo de um arquivo sendo trabalhado ativamente por outro processo. Acabei clonando a funcionalidade do watch no Windows. O exe compilado, assim como a fonte, está disponível no site.

veja o Windows

    
por 16.03.2014 / 02:56
1

Eu criei um comando watch para windows chamado llwatch.

O código está no meu site landenlabs.com

e também no GitHub

Você pode precisar usar x64 para assistir a programas x64 e x32 para os outros. Não tenho certeza como janelas exigentes é.

    
por 29.01.2016 / 14:44
0

o que @harrymc disse, exceto com o sono watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./ watch.bat npm teste de execução

npm run test a cada 5 seg

    
por 14.04.2016 / 06:16
0
por 23.05.2018 / 18:36
-1

Eu estava com pressa .... usei uma sugestão e mudei um pouco para trabalhar para mim:

para / l% g em () do @ (teste de eco & timeout / t 2)

Eu mudei para:

para / l% g em () do @ (test.bat & timeout / t 2)

E criei o arquivo test.bat com a linha de comando. No meu caso, foi:

net group / domain

Descobri que o comando echo acabou de ser impresso na tela, mas não executou o comando

    
por 10.08.2018 / 15:42