Je cherche un programme/script/fonction de ligne de commande Windows qui fonctionne comme le programme watch
de Linux.
watch
appelle périodiquement un autre programme/quel que soit et affiche le résultat, ce qui est très utile pour actualiser un fichier de sortie ou similaire toutes les secondes:
watch cat my-output.txt
ou, plus puissamment:
watch grep "fail" my-output.txt
Je l'ai cherché dans la bibliothèque de cygwin, mais cela ne semble pas être présent.
watch
est disponible dans Cygwin, dans le package procps
comme indiqué ici (cette information peut être trouvée via la recherche de package sur le site Web, ici ). Je ne pense pas que ce paquet soit installé avec la configuration par défaut de cygwin, mais je le sélectionne généralement lors de nouvelles installations afin que la commande watch soit disponible.
L'emplacement des outils dans les paquetages correspond généralement aux noms de paquet dans les distributions Linux (le paquet contenant watch
est également procps sur Debian et Ubuntu), donc si la fonction de recherche de paquet Cygwin échoue, les informations pour/à partir de distributions Linux peuvent offrir des indices.
Écrivez votre propre. Disons que le fichier watch.bat
contient:
@ECHO OFF
:loop
cls
%*
timeout /t 5 > NUL
goto loop
et appelez-le via, par exemple:
watch echo test
fera écho test
toutes les 5 secondes.
Powershell a la commande "tant que". Vous pouvez l’utiliser comme sous Linux:
tandis que (1) {votre_commande; dormir 5}
Version Linux:
bien que vrai faites votre_commande; sleep5; terminé
Autres:
while ($ true) {netstat -an | findstr 23560; dormir 5; rendez-vous amoureux}
Une commande Windows générique oneliner pour accomplir ceci:
for /l %g in () do @( echo test & timeout /t 2 )
Remplacez "echo test" par la commande que vous souhaitez exécuter à plusieurs reprises.
J'ai écrit ce petit module PowerShell pour faire ce que vous cherchiez. Il suffit de le mettre dans
C:\Users\[username]\Documents\WindowsPowerShell\Modules\Watch
et exécutez import-module watch
dans 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
C'est une doublure PowerShell:
while ($true) { <your command here> | Out-Host; Sleep 5; Clear }
Voici comment je le ferais dans PowerShell:
while(1){ netstat -an|grep 1920;start-sleep -seconds 2;clear }
La condition while(1)
est équivalente à while true
, en boucle indéfiniment.
Vous pouvez également rattraper un retard en utilisant la commande PING, par exemple:
@echo off
:loop
cls
dir c:\temp
REM 5000mS (5 sec) delay...
ping 1.1.1.1 -n 1 -w 5000 >NUL
goto loop
J'ai eu le même problème lorsque j'ai eu besoin de vérifier la taille d'un fichier en cours de traitement par un autre processus. J'ai fini par cloner la fonctionnalité de watch sur Windows. Le fichier compilé ainsi que la source sont disponibles sur le site.
ce que @harrymc a dit sauf avec sleep watch.bat
@ECHO OFF
:loop
%*
sleep 5
goto loop
./watch.bat npm lancer le test
npm run test
toutes les 5 secondes
J'ai créé une commande de surveillance pour Windows appelée llwatch.
Le code est à la fois sur mon site web landenlabs.com
et aussi sur GitHub
Vous devrez peut-être utiliser x64 pour regarder des programmes x64 et x32 pour les autres. Je ne sais pas à quel point les fenêtres sont difficiles.