อะนาล็อก Windows ของคำสั่งนาฬิกา Linux คืออะไร


58

ฉันกำลังมองหาฟังก์ชั่นโปรแกรมบรรทัดคำสั่ง / สคริปต์ / Windows ที่ทำงานได้เหมือนwatchโปรแกรมของ Linux

watch เรียกโปรแกรมอื่น / สิ่งใดเป็นระยะ ๆ และแสดงผลลัพธ์ซึ่งเหมาะสำหรับการรีเฟรชไฟล์เอาต์พุตหรือคล้ายกันทุกวินาที:

watch cat my-output.txt

หรือมีพลังมากขึ้น:

watch grep "fail" my-output.txt

ฉันมองหามันในห้องสมุดของ cygwin แต่ดูเหมือนจะไม่ปรากฏ

คำตอบ:


14

watchมีอยู่ใน Cygwin ในprocpsแพคเกจตามที่ระบุไว้ที่นี่ (ข้อมูลนี้สามารถพบได้ผ่านการค้นหาแพคเกจบนเว็บไซต์ที่นี่ ) ฉันไม่คิดว่าแพคเกจนี้ติดตั้งโดยการตั้งค่าเริ่มต้น cygwin แต่เป็นแพ็คเกจที่ฉันมักจะเลือกในการติดตั้งใหม่เพื่อให้มีคำสั่ง watch พร้อมใช้งาน

ตำแหน่งของเครื่องมือในแพคเกจมักจะตรงกับชื่อแพ็กเกจในลีนุกซ์ดิสทริบิวชั่น (แพ็คเกจที่บรรจุwatchคือ procps บน Debian และ Ubuntu ด้วย) ดังนั้นหากฟังก์ชันการค้นหาแพ็คเกจ Cygwin ล้มเหลวคุณ, ข้อมูลสำหรับ / จากลีนุกซ์อาจเสนอข้อมูล


47

เขียนของคุณเอง สมมติว่าไฟล์watch.batมี:

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

และเรียกมันผ่านตัวอย่างเช่น:

watch echo test

จะสะท้อนtestทุก 5 วินาที


@ Keilaron: โปรดทราบว่าการแก้ไขของคุณไม่ดีและฉันต้องแก้ไข โปรดระวังให้มากขึ้น
สกอตต์

เรียบง่าย แต่ยอดเยี่ยม หลีกเลี่ยงการติดตั้ง cygwin สำหรับคำสั่งเดียวเท่านั้น Vielen Dank!
Stef

28

Powershell มีคำสั่ง "while" คุณสามารถใช้มันใน Linux:

ในขณะที่ (1) {your_command; นอน 5}

รุ่น Linux:

ในขณะที่จริง ทำ your_command; sleep5; เสร็จแล้ว

อื่น ๆ :

ในขณะที่ ($ จริง) {netstat -an | findstr 23560; นอน 5 วัน}


4
คุณสามารถใช้while (1)เพราะ1เป็นความจริง
TheQuickBrownFox

1
ฉันยังพบว่าคุณสามารถใช้ "ชัดเจน" เป็นคำสั่งสุดท้ายดังนั้นจึงมีลักษณะเหมือนนาฬิกา
itmuckel

13

คำสั่งทั่วไปของ Windows oneliner เพื่อทำสิ่งนี้ให้สำเร็จ:

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

แทนที่ "echo test" ด้วยคำสั่งที่คุณต้องการเรียกใช้ซ้ำ ๆ


เป็นคนดีคนธรรมดาคนหนึ่งที่ใช้กลอุบาย
user230910

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

1
ดูดีมาก แต่ฉันอยากจะสนับสนุนให้ฟังก์ชั่นอยู่ในรูปแบบ Verb-Noun (เช่น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วนลูปไม่สิ้นสุด


6

มันเป็นซับใน PowerShell หนึ่ง:

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

ฉันจะใส่Clearก่อน
sastanin

มันขึ้นอยู่กับว่าคำสั่งของคุณใช้เวลานานแค่ไหนในการรันและเอาท์พุทเพื่อแสดง .... คุณสามารถเปลี่ยนคำสั่งได้ แต่นี่เป็นแนวคิดทั่วไป
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

ฉันสร้างคำสั่ง watch สำหรับ windows ที่เรียกว่า llwatch

รหัสมีทั้งบนเว็บไซต์ของฉันlandenlabs.com

และบนGitHub ด้วย

คุณอาจต้องใช้ x64 เพื่อดูโปรแกรม x64 และ x32 สำหรับโปรแกรมอื่น ๆ ไม่แน่ใจว่าหน้าต่างพิถีพิถันเป็นอย่างไร


ไม่แน่ใจว่าทำไมสิ่งนี้จึงถูก downvote ... ยินดีต้อนรับสู่Super User !
jpaugh

1

สิ่งที่ @harrymc พูดยกเว้นกับ sleep watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm ทดสอบการทำงาน

npm run test ทุก 5 วินาที



-1

ฉันรีบ .... ฉันใช้คำแนะนำเดียวและเปลี่ยนให้ใช้งานได้สำหรับฉัน:

สำหรับ / l% g ใน () ทำ @ (echo ทดสอบ & หมดเวลา / t 2)

ฉันเปลี่ยนเป็น:

สำหรับ / l% g ใน () ทำ @ (test.bat & timeout / t 2)

และฉันสร้างไฟล์ test.bat ด้วยบรรทัดคำสั่ง ในกรณีของฉันมันเป็น:

กลุ่มสุทธิ / โดเมน

ฉันพบว่าคำสั่ง echo เพิ่งพิมพ์ไปที่หน้าจอ แต่ไม่ได้ดำเนินการคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.