Tương tự Windows của lệnh đồng hồ Linux là gì?


58

Tôi đang tìm kiếm một chức năng dòng chương trình / tập lệnh / dòng lệnh Windows hoạt động giống như watchchương trình của Linux .

watch định kỳ gọi một chương trình khác / bất cứ điều gì và hiển thị kết quả, rất tốt để làm mới một tệp đầu ra hoặc tương tự mỗi giây:

watch cat my-output.txt

hoặc, mạnh mẽ hơn:

watch grep "fail" my-output.txt

Tôi đã tìm nó trong thư viện của Cygwin, nhưng dường như nó không có mặt.

Câu trả lời:


14

watchcó sẵn trong Cygwin, trong procpsgói như được liệt kê ở đây (thông tin này có thể được tìm thấy thông qua tìm kiếm gói trên trang web, ở đây ). Tôi không nghĩ gói này được cài đặt theo thiết lập cygwin mặc định, nhưng nó là gói tôi thường chọn trên các bản cài đặt mới để có sẵn lệnh xem.

Vị trí của các công cụ trong các gói thường khớp với tên gói trong các bản phân phối Linux (gói chứa watchlà Procps trên Debian và Ubuntu) vì vậy nếu chức năng tìm kiếm gói Cygwin làm bạn thất bại, thông tin cho / từ các bản phân phối Linux có thể cung cấp manh mối.


47

Viết của riêng bạn. Giả sử tập tin watch.batchứa:

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

và gọi nó qua, ví dụ:

watch echo test

sẽ vang lên testcứ sau 5 giây.


@Keilaron: Lưu ý rằng chỉnh sửa của bạn rất tệ và tôi phải sửa nó. Xin hãy cẩn thận hơn.
Scott

Đơn giản nhưng tuyệt vời. Tránh cài đặt cygwin chỉ cho lệnh đó. Vielen đã chết!
Stef

28

Powershell có lệnh "while". Bạn có thể sử dụng nó như trong Linux:

while (1) {your_command; ngủ 5}

Phiên bản Linux:

trong khi sự thật; làm your_command; ngủ5; làm xong

Khác:

trong khi ($ true) {netstat -an | tìm kiếm 23560; ngủ 5; ngày}


4
Bạn chỉ có thể sử dụng while (1), bởi vì 1là sự thật.
TheQuickBrownFox

1
Tôi cũng thấy rằng bạn có thể sử dụng "rõ ràng" như là tuyên bố cuối cùng, vì vậy nó hoạt động giống như đồng hồ hơn.
itmuckel

13

Một lệnh chung Windows oneliner để thực hiện điều này:

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

Thay thế "kiểm tra tiếng vang" bằng lệnh bạn muốn chạy liên tục.


một cái hay, một cái lót đơn giản mà thực hiện được mẹo
user230910

6

Tôi đã viết mô-đun PowerShell nhỏ này để làm những gì bạn đang tìm kiếm. Chỉ cần đặt nó vào

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

và chạy import-module watchtrong 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
Có vẻ khá tốt nhưng tôi sẽ khuyến khích hàm ở định dạng Động từ (ví dụ Watch-Command) với bí danh là Watch( Set-Alias -Name Watch -item Watch-Command).
duct_tape_coder

6

Đây là cách tôi sẽ làm điều đó trong PowerShell:

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

Điều kiện while(1)tương đương với while true, lặp đi lặp lại vô thời hạn.


6

Đó là một lớp lót PowerShell:

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

Tôi sẽ đặt lên hàng Clearđầu.
sastanin

nó phụ thuộc vào thời gian lệnh của bạn chạy trong bao lâu và sau đó xuất ra để hiển thị .... bạn có thể thay đổi thứ tự, nhưng đây là ý tưởng chung
ErikW

3

Bạn cũng có thể tạo một độ trễ bằng cách sử dụng lệnh PING, ví dụ:

@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

Tôi gặp vấn đề tương tự khi cần kiểm tra kích thước tệp của một tệp đang được tích cực xử lý bởi một quy trình khác. Tôi đã kết thúc việc nhân bản chức năng của đồng hồ trên Windows. Các exe được biên dịch cũng như nguồn có sẵn tại trang web.

xem cho Windows


1

Tôi đã tạo một lệnh xem cho các cửa sổ được gọi là llwatch.

Mã này là trên cả trang web của tôi Landenlabs.com

và cũng trên GitHub

Bạn có thể cần sử dụng x64 để xem các chương trình x64 và x32 cho các chương trình khác. Không chắc cửa sổ kén chọn như thế nào.


Không chắc chắn lý do tại sao điều này đã bị hạ cấp ... Chào mừng bạn đến với Siêu người dùng !
jpaugh 2/2/2016

1

những gì @harrymc nói ngoại trừ với đồng hồ ngủ.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm chạy thử nghiệm

npm run test cứ sau 5 giây



-1

Tôi đã vội vàng .... Tôi đã sử dụng một đề nghị và thay đổi nó một chút để làm việc cho tôi:

cho / l% g in () do @ (kiểm tra tiếng vang & hết thời gian / t 2)

Tôi đã đổi nó thành:

cho / l% g in () do @ (test.bat & hết thời gian / t 2)

Và tôi đã tạo tệp test.bat bằng dòng lệnh. Trong trường hợp của tôi, đó là:

nhóm / tên miền

Tôi thấy rằng lệnh echo chỉ in ra màn hình nhưng không thực thi lệnh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.