มี "เพจ" ในเพจหรือไม่


24

ภายใต้ UNIX shell ฉันจะได้ผลคล้ายกับwatchคำสั่งได้อย่างไร แต่ด้วยการเพจเพื่อให้ฉันสามารถเลื่อนไปรอบ ๆ ในเอาต์พุตถ้ามันใช้เวลามากกว่าหนึ่งหน้าจอ?

ในคำอื่น ๆ ที่ฉันต้องการโปรแกรมที่ไปเป็นwatchสิ่งที่เป็นไปlesscat

ตัวอย่างเช่นสมมติว่าฉันต้องการดูผลลัพธ์ของqstatฉันสามารถใช้

watch qstat

เพื่อดูผลลัพธ์ของ qstat แต่สิ่งนี้สามารถแสดง screenful แรกเท่านั้น

กับรุ่นเพจของwatchผมจะสามารถย้ายไปรอบ ๆ watchในการส่งออกในขณะที่มันยังคงมีการปรับปรุงอย่างต่อเนื่องโดย มีวิธีการทำเช่นนี้ในขณะนี้กับสาธารณูปโภคที่มีอยู่?


นี่อาจเป็นของ SuperUser หรือ ServerFault

คุณอาจจะถูกต้องฉันจะย้ายได้อย่างไร
David Dean

มีคนลงคะแนนให้ย้ายสามคนจนถึงตอนนี้ หากมีคนอีกสองคน (หรือผู้ดำเนินรายการ) ลงคะแนนให้ย้ายมันจะเกิดขึ้นโดยอัตโนมัติ
เกร็ก Hewgill

ทำไมไม่เพียงแค่เปิดหน้าต่างที่ใหญ่ขึ้นและหายไปพร้อมเพจจิ้ง?
Marcin

1
เพราะหน้าจอของฉันเต็มแล้ว ทำไมต้องใช้lessเมื่อคุณสามารถใช้catและเป็นหน้าต่างที่ใหญ่กว่าได้
David Dean

คำตอบ:


18

แทนที่จะปรับเปลี่ยนคำสั่ง 'ดู' ใช้หน้าจอ!

ตัวอย่างเช่นสมมติว่าคุณต้องสามารถเห็นความสูง 300 บรรทัดและความกว้าง 100 ตัวอักษรและเลื่อนไปรอบ ๆ หลังจากหน้าจอเริ่มบังคับขนาดดังนี้:

C-a :height -w 300
C-a :width -w 100

ตอนนี้เริ่มคำสั่งนาฬิกาของคุณ จากนั้นคุณสามารถใช้C-a <ESC>หน้ารอบจอแสดงผล

น่าเสียดายที่จอแสดงผลไม่รีเฟรชขณะอยู่ในโหมดคัดลอก แต่ถ้าคุณต้องการปรับส่วนของหน้าต่างที่คุณกำลังดูวิธีที่ง่ายที่สุดอาจจะเรียกใช้คำสั่งความสูง / ความกว้างอีกครั้งตามค่าเริ่มต้นเทอร์มินัลของคุณจะแสดงที่ด้านล่างขวาของหน้าต่างเสมือน


ปัญหาเดียวก็คือวิธีการทำซ้ำคำสั่งอย่างต่อเนื่องในขณะที่ว่างหน้าจอระหว่างการเดินทางแต่ละครั้ง
David Dean

โอ๊ะฉันหมายถึงเรียกใช้คำสั่ง watch ภายในหน้าจอ คงที่
MikeyB

yartls - อีกหนึ่งเหตุผลที่จะรัก :) หน้าจอ
วอร์เรน

โปรดทราบว่าC-เป็นที่รู้จักctrl-
henry

5

คุณสามารถลองสิ่งนี้:

ในขณะที่ vmstat; นอนหลับ 1 เสร็จสิ้น น้อยกว่า

แทนที่ vmstat ด้วย qstat และปรับ sleep ตามความต้องการของคุณ


ทั้งหมดนี้ก็คือการทำซ้ำคำสั่งlessซึ่งหมายความว่าคุณจะต้องเลื่อนเพื่อดูผลลัพธ์ล่าสุด
David Dean

ใช่ แต่คุณสามารถเลื่อนกลับ คุณไม่สามารถมีทั้งสองอย่างพร้อมกัน กด shift f นั่นคือทุน 'F' จะทำงานเหมือนหาง
Spacen Jasset


2

ตกลงฉันไปwatchlessฟังก์ชั่นนิดหน่อย มันค่อนข้างหยาบและมันยังไม่ปรากฏว่าใช้งานได้ดี แต่นี่ไป:

#!/bin/bash -u
out=$(mktemp)
(while [ 1 ]; do
    "$@" > $out;
    sleep 2;
done) &
less $out
kill $!

คุณต้องใช้Rปุ่มด้วยตนเองในเวลาน้อยกว่าเพื่อให้จอแสดงผลอัปเดต

ดูเหมือนจะใช้งานwatchless dateได้ แต่ไม่ใช่สำหรับwatchless qstatหรือwatchless pstreeซึ่งทั้งคู่แสดงว่างเปล่า ความคิดใด ๆ


คุณควรใช้ไฟล์ที่สองที่จะเขียนออกของระยะต่อไปของคำสั่งและแล้วmvไฟล์ที่สองนี้ไปยังแฟ้มอ่านโดยlessเป็นmvเป็นอะตอม มิฉะนั้นอาจจะคิดว่าไฟล์ได้หายไปถ้ามีการร้องขอการฟื้นฟูในเวลาเดียวกันเป็นไฟล์จะถูกเขียนไปด้วยless "$@" > $outคุณควรเขียนไปยังไฟล์เอาต์พุตหนึ่งครั้งก่อนเริ่มลูป
Aurélien Ooms

0

ฉันไม่เห็นว่าจะสามารถนำสิ่งนี้ไปใช้ได้อย่างไรเมื่อเนื้อหาแถวเปลี่ยนแปลงและwatchจะรีเซ็ตกลับเป็นบรรทัดแรกทุก 2 วินาทีแม้ว่าคุณจะเลื่อนลง

วิธีแก้ไขบางอย่างคือ:

watch 'qstat | tail -n40' เพื่อแสดงเอาต์พุตของ qstat เริ่มต้นจากบรรทัดที่ 40 จากด้านล่าง

watch 'qstat | grep jsmith' เพื่อ grep ผลลัพธ์เพื่อให้บรรทัดที่คุณสนใจอยู่ในหน้าจอแรกเสมอ

โปรดทราบว่าคุณจะต้องใส่คำสั่งที่อยู่รอบ ๆ ท่อในเครื่องหมายคำพูดเดียว - มิฉะนั้นคุณจะได้รับท่อส่งออกของไม่ได้การส่งออกของwatchqstat


0

หากต้องการคำตอบของ enkrs ต่อไป

ดู 'qstat | หัว -300 | หาง -15 '

คุณจะได้รับหน้าที่ใด ๆ ในผลลัพธ์ของ qstat


0

นี่เป็นสคริปต์ที่ค่อนข้างหยาบซึ่งดูเหมือนจะใช้ได้กับหลายคำสั่งที่ฉันใช้

#!/bin/bash
# ---- mywatch.sh ----

if [ $# -lt 1 && $# -gt 2 ]; then
    echo "Usage: $0 <command> <delay>" 
    exit 1
fi

CMD=$1
if [ $# -eq 2 ]; then
  DELAY=$2
else
  DELAY=2 # default
fi

while : ; do
  ( (echo -e "Every ${DELAY}s: $CMD\n"; $CMD) | less )&
  PID=$!
  sleep $DELAY
  kill -9 $PID &> /dev/null
  clear
done

ใช้เป็นเช่นนี้:

alias mywatch="~/bin/mywatch.sh"

mywatch vmstat
mywatch "ps aux" # commands in options need to be quoted
mywaych pstree 10 # change delays

ค่อนข้างจะอวดความเปลี่ยนแปลงระหว่างการรีเฟรชมันไม่ราบรื่นอย่างที่ฉันต้องการ โดยธรรมชาติการเป็นสคริปต์อย่างง่ายไม่สนับสนุนไฮไลต์ของ diff (ดู -d) นอกจากนี้การแยกวิเคราะห์อาร์กิวเมนต์อินพุตสามารถทำได้ดีกว่า



0

ฉันใช้สคริปต์หลามอย่างง่ายเพื่อตอบสนองคำขอนี้ชื่อ "watchall"

รับได้โดย: pip installallall

แทนที่นาฬิกาด้วย watchall และเพลิดเพลินกับหน้าจอเลื่อน ตอนนี้รองรับแฟล็ก -n และ -d เท่านั้น


-1

คุณสามารถลอง:

watch command > file

จากนั้นในไฟล์ของคุณคุณจะเห็นผลลัพธ์ผนวก (ฉันไม่มีกล่องลินุกซ์ในขณะนี้เพื่อทดสอบ)


1
นั่นไม่ได้ทำในสิ่งที่คุณตั้งใจจริง ๆ แล้วมันจะเติมfileเอาท์พุทเดิมซ้ำไปซ้ำมา แน่นอนมันไม่ได้ตอบคำถามเดิม
Greg Hewgill

จากนั้นฉันก็ดูนโน :)

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