Linux watchコマンドのWindowsアナログとは何ですか?


58

Linuxのwatchプログラムのように機能するWindowsプログラム/スクリプト/コマンドライン関数を探しています。

watch 定期的に別のプログラムを呼び出して結果を表示します。これは、出力ファイルなどを毎秒更新するのに最適です。

watch cat my-output.txt

または、より強力に:

watch grep "fail" my-output.txt

cygwinのライブラリで探しましたが、存在しないようです。

回答:


14

watchCygwinで、ここにprocpsリストされているパッケージで入手できます(この情報は、Webサイトのパッケージ検索で見つけることができますこちら)。このパッケージはデフォルトのcygwinセットアップでインストールされるとは思いませんが、watchコマンドを使用可能にするために新しいインストールで通常選択するパッケージです。

パッケージ内のツールの場所は通常、Linuxディストリビューションのパッケージ名と一致します(含まれるパッケージwatchはDebianおよびUbuntuでもprocpsです)。Cygwinパッケージ検索機能が失敗した場合、Linuxディストリビューションの情報が手がかりを提供します。


47

自分で書いてください。ファイルに次のものwatch.batが含まれているとします:

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

そして、次のように呼び出します:

watch echo test

test5秒ごとにエコーします。


@Keilaron:編集内容が悪かったため、修正する必要があることに注意してください。もっと注意してください。
スコット

シンプルだが素晴らしい。その単一のコマンドだけのためにcygwinをインストールすることを避けます。ヴィーレン・ダンク!
Stef

28

Powershellには「while」コマンドがあります。Linuxのように使用できます。

while(1){your_command; 睡眠5}

Linuxバージョン:

真実ながら your_commandを実行します。sleep5; やった

その他:

while($ true){netstat -an | findstr 23560; 睡眠5; 日付}


4
真実while (1)であるため、単に使用でき1ます。
TheQuickBrownFox

1
また、最後のステートメントとして「clear」を使用できることもわかったので、監視のように動作します。
itmuckel

13

これを実現するための一般的なWindowsコマンドワンライナー:

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

「エコーテスト」を繰り返し実行するコマンドに置き換えます。


素敵な1、トリックを行い、単純な1ライナー
user230910

6

この小さなPowerShellモジュールを作成して、あなたが探していたものを実行しました。入れて

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

import-module watchPowerShell で実行します。


# ---- 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エイリアスを持つ動詞-名詞形式にすることをお勧めします。WatchSet-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

llwatchと呼ばれるウィンドウ用の監視コマンドを作成しました。

コードは両方とも私のウェブサイトlandenlabs.comにあります

また、GitHubでも

x64プログラムを視聴するにはx64を使用し、他のプログラムはx32を使用する必要がある場合があります。うるさいウィンドウがどれほどいいかわかりません。


なぜこれがダウン投票されたのかわからない... スーパーユーザーへようこそ!
jpaugh 16

1

sleep watch.batを除いて@harrymcが言ったこと

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm run test

npm run test 5秒ごと



-1

私は急いでいた....私は1つの提案を使用し、私のために働くためにそれを少し変えた:

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

私はそれを次のように変更しました:

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

そして、コマンドラインでtest.batファイルを作成しました。私の場合、それは:

ネットグループ/ドメイン

エコーコマンドが画面に出力されたが、コマンドは実行されなかったことがわかりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.