`watch`의 페이징 버전이 있습니까?


24

UNIX 셸에서 watch명령 과 비슷한 효과를 얻을 수 있지만 페이징을 사용하여 두 화면 이상을 차지할 경우 출력에서 ​​스크롤 할 수 있습니까?

즉, 나는에있는 프로그램이 원하는 watch것을 less하는 것입니다 cat.

예를 들어, 수 있습니다 내가의 출력을보고 싶어 말을 qstat내가 사용할 수있는,

watch qstat

qstat의 출력을 볼 수 있지만 첫 번째 화면 만 표시 할 수 있습니다.

페이징 버전을 사용하면에 watch의해 지속적으로 업데이트되므로 출력에서 ​​이동할 수 있습니다 watch. 기존 유틸리티를 사용하여 현재이를 수행 할 수있는 방법이 있습니까?


이것은 아마도 SuperUser 또는 ServerFault에 속할 것입니다.

당신 말이 맞을 것입니다, 어떻게 움직일 수 있습니까?
David Dean

지금까지 세 명이 투표하기로 결정했다. 두 명 이상의 사람 (또는 중재자)이 투표하기로 결정하면 자동으로 진행됩니다.
Greg Hewgill 5

왜 더 큰 창을 열고 페이징을 사용하지 않습니까?
Marcin

1
화면이 이미 가득 차서? 왜 더 큰 창을 less사용할 수있을 때 사용 cat합니까?
David Dean

답변:


18

'watch'명령을 수정하는 대신 화면을 사용하십시오!

예를 들어, 높이 300 줄과 너비 100자를보고 그 주위를 움직여야한다고 가정 해 봅시다. 화면을 시작한 후 크기를 다음과 같이 강제하십시오.

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

이제 시계 명령을 시작하십시오. 그런 다음 C-a <ESC>디스플레이 주변을 페이징 하는 데 사용할 수 있습니다 .

불행히도, 복사 모드에서는 디스플레이가 새로 고쳐지지 않습니다. 그러나보고있는 창의 섹션을 조정하려는 경우 가장 쉬운 방법은 기본적으로 터미널에 가상 창의 오른쪽 하단이 표시되는 높이 / 폭 명령을 다시 실행하는 것입니다.


유일한 문제는 각 이동 사이에 화면을 비우면서 명령을 계속 반복하는 방법입니다
David Dean

화면에서 watch 명령을 실행해야했습니다. 결정된.
MikeyB 09 년

yartls-화면을 좋아하는 또 다른 이유 :)
warren

참고 C-일명입니다ctrl-
헨리

5

당신은 이것을 시도 할 수 있습니다 :

vmstat; 잠을 1; 완료 | 적게

vmstat를 qstat로 바꾸고 필요에 따라 절전 모드를 조정하십시오.


이 모든 작업은에 명령을 계속 반복하는 것 less입니다. 즉, 최신 출력을 보려면 계속 스크롤해야합니다.
David Dean

예,하지만 뒤로 스크롤 할 수 있습니다. 한 번에 둘 다 가질 수는 없습니다. Shift 키를 누르면 대문자 'F'는 꼬리처럼 작동합니다.
Spacen Jasset


2

좋아, 나는 약간의 watchless기능을 수행했다. 조금 거칠고 아직 완전히 작동하지는 않지만 여기에갑니다.

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

R디스플레이를 업데이트 하려면 키를 적게 수동으로 사용해야합니다 .

또는 에 watchless date대해서는 작동 하지 않는 것으로 보이며 둘 다 공백으로 표시됩니다. 어떤 아이디어?watchless qstatwatchless pstree


당신은 명령의 다음 실행의 출력 한 후 작성하는 두 번째 파일을 사용한다 mv하여 파일 읽기이 두 번째 파일을 lessmv원자이다. 그렇지 않으면 less파일을 쓰는 동안 동시에 새로 고침을 요청하면 파일이 사라 졌다고 생각할 수 "$@" > $out있습니다. 루프를 시작하기 전에 출력 파일에 한 번 작성해야합니다.
Aurélien Ooms

0

행 내용이 변경되면 어떻게 구현되는지 알 수 없으며 watch아래로 스크롤 할 수 있어도 2 초마다 첫 번째 줄로 다시 재설정됩니다.

몇 가지 해결 방법은 다음과 같습니다.

watch 'qstat | tail -n40' 아래에서 40 번째 줄부터 시작하여 qstat의 출력을 표시

watch 'qstat | grep jsmith' 관심있는 줄이 항상 첫 번째 화면에 오도록 출력을 grep하기 위해.

파이프 주위에 명령을 작은 따옴표로 묶어야합니다. 그렇지 않으면 출력이 watch아닌 출력을 파이핑 할 것 입니다 qstat.


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 (watch -d)의 하이라이트를 지원하지 않습니다. 또한 입력 인수의 구문 분석이 더 잘 수행 될 수 있습니다.



0

이 요청을 충족하기 위해 "watchall"이라는 간단한 파이썬 스크립트를 구현합니다.

그것을 얻을 : pip install watchall

watchall을 watchall로 바꾸고 스크롤 가능한 화면을 즐기십시오. 이제는 -n 및 -d 플래그 만 지원합니다.


-1

당신은 시도 할 수 있습니다:

watch command > file

그런 다음 파일에 부록 출력이 표시됩니다 (이것을 테스트 할 Linux 상자 리그가 없습니다)


1
그것은 당신이 의도 한 것을하지 않을 것입니다. 실제로, 그것은 단지 file동일한 출력으로 반복 해서 채워질 것 입니다. 분명히 원래의 질문을 다루지 않습니다.
Greg Hewgill

그때 나는 dunno :)

1
">"를 ">>"로 변경하여 파일에 데이터를 추가 하시겠습니까?
Rory
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.