적은 명령을 동적으로 새로 고치는 방법이 있습니까?


141

나는 watch명령을 좋아 하지만 한계가 있습니다.

watchwith 의 기능을 모방 할 수 있는지 궁금합니다 less. 나는 주로 실행중인 스크립트를 통해 동적으로 수정되므로 디렉토리를 스크롤 할 수있는 기능을 찾고 있습니다.


을 찾고 tail -f foo.log | grep bar있으며 tail / grep 파이프 라인을 다시 시작하여 grep 명령을 동적으로 변경할 수 있습니다.
Alexander Mills

답변:


119

에서 less, 당신은 입력 할 수 F있는 파일 (같은 말에 읽기 계속 tail -f) :e다른 파일을보기 위해 파일 이름과 파일 이름을 입력 할 수 있지만 불행히도 현재 파일의 이름을 입력하면 파일을 less다시로드하지 않습니다. 그러나이 제안, 현재 파일을 다시 읽어 만들 수있는 트릭있다 sabgenton : 유형 :e과 존재하지 않는 파일의 이름을 입력은 ; 그러면 오류 메시지가 덜 표시되고 현재 파일이 다시로드됩니다.

에 대한 대안을 찾고 있다면 다음과 watch ls같습니다.

  • 최신 파일 관리자 (예 : Nautilus, Thunar, Konqueror, Dolphin, Finder)는 실시간으로보기를 새로 고칩니다.
  • Emacs는 실시간 새로 고침을하지 않지만을 사용 auto-revert-mode하면 5 초마다 파일 또는 디렉토리를 다시로드합니다 (지연 구성 가능).
  • w3m은 주로 웹 브라우저이지만 통과 가능한 디렉토리 및 텍스트 파일 뷰어를 만듭니다. R(로컬) URL을 다시로드하려면 누릅니다 .

6
나를 위해 : e randomnamejkdlfjldf가 존재하지 않는 파일 이름을로드하지 못하면 현재 파일로 다시로드됩니다 .D
sabgenton

1
@sabgenton 감사합니다, 나는 그것을 몰랐습니다. 대단한 속임수입니다. 나는 그것을 내 대답에 추가했지만 당신은 그것을 당신 자신의 답변으로 게시 할 수 있습니다 (자이드가 수락하기를 바랍니다).
Gilles

1
@CMCDragonkai 아니요, less +F추가 된 콘텐츠 만 감시합니다. :e nonexistentfile완전히 변경된 입력을 다시 읽는 데 사용 합니다.
Gilles

1
그것에 대한 명령 행 플래그가 있습니까?
CMCDragonkai

3
@PaulWagland 아니요, R파일을 안정적으로 새로 고치지 않습니다. 화면을 새로 고치고 일부 입력 버퍼를 지우지 만 모든 상황에서 실제로 파일에서 데이터를 다시로드하지는 않습니다 (파일이 큰 경우에만 코드에 깊이 파고 들지 않았습니다).
Gilles

65

Shift+F할 것이다 less유사 tailf. 즉, 파일에 더 많은 데이터가 추가되면 새로 고쳐집니다.


7
이것은 추가 작업 에만 적용됩니다. 줄을 제자리에서 제거하거나 편집 less하면 해당 변경 사항이 표시되지 않습니다.
Nathaniel M. Beaver 1

다음 모드를 중지하고 스크롤 가능 모드를 다시 입력하려면 어떻게합니까?
Tom Hale

1
<kbd> Ctrl + C </ kbd>
balki

1
balki 내 경험에 따르면을 사용하면 데이터를 파이핑하는 명령이 종료됩니다 $COMMAND | less. 이 주위에 좋은 방법이 있는지 궁금합니다. 당신은 같은 일을 할 수 $COMMAND > /tmp/file & less /tmp/file있지만 그다지 좋지 않습니다.
Att Righ

@AttRigh 내 명령을 살해하지 (그러나 내가 명령이 방법을 실행하는 로그를 읽고, 내가 덜 기술적으로 파이프를하지 않습니다)
예나

41

간단히 입력하십시오 :

less +F filename

편집기 내에서 "F"를 누르는 것과 같습니다.


1
감사; 별칭 alias check="less +F"을 my에 추가했습니다 .bashrc.
Luke Davis

22

man페이지는 매우 유익 할 수 있습니다. 그들에게 협박하지 마십시오. 무엇보다도 명령을 man less사용하여 다음을 R수행 할 수 있다고 말합니다 .

   R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.

(이 질문은 6 세 이상이지만 Google 검색에서 발생하므로 여기를 클릭하여 링크를 클릭 한 유일한 사람은 아닙니다.)


7
다른 프로그램의 출력으로 인해 화면이 중단 된 경우 화면을 다시 그립니다. 지속적으로 파일을 다시로드하지 않습니다. 나는 코드가 무엇인지 확인하기 위해 깊이 파고 들지 않았으며 실험적으로 짧은 파일은 다시로드되지 않습니다. 필자는 맨 페이지에 겁 먹지 않았으며이 설명이 잘못 표현되었다고 말합니다. 나는 명령이 무엇을해야하는지 모르기 때문에 모른다.)
Gilles

나는 전문가가 아니며 소스 코드를 읽지 못했지만 파일에 대해 이미 알고있는 것을 잊고 다시로드하여 다시로드하는 입력을 기반으로 출력을 새로 고치는 것입니다. 질문에 "적은 명령을 동적으로 새로 고칠 수있는 방법이 있습니까?" 대답하기 전에 질문의 설명을 더 자세히 읽으면 "실행중인 스크립트를 통해 동적으로 수정 될 때 내 디렉토리를 스크롤하고 싶다"고 대답하기 때문에 대답하지 않았을 수 있습니다. 그에 대한 올바른 명령은 아닙니다.
destenson

3 바이트 길이의 파일을 사용할 때도 잘 작동합니다. 더 큰 파일에서도 작동하지 않는 이유를 상상할 수 없습니다.
애디슨

1
큰! 나를 위해 그것은 짧은 파일과 긴 파일 모두에서 작동합니다. 방금 두 가지 가능한 문제를 발견했습니다. 1. less파일 이름을 사용하여 파일을 다시 열지 않았습니다 . 즉 파일을 사용하여 파일을 덮어 쓰는 것과 같이 파일의 inode가 변경된 mv경우 이전 파일 내용이 유지되었을 때 (아마도 이전 inode를 다시 읽었 음)- -2. 첫 번째로 표시된 행은 원래 파일 내용과 동일한 바이트 오프셋에서 시작합니다. 따라서 줄 길이가 변경되면 첫 번째로 표시된 줄이 불완전하고 표시된 줄이 위 / 아래로 이동할 수 있습니다.
pabouk

R항상 작동하지는 않습니다. 참조 unix.stackexchange.com/questions/4351/...
wisbucky

5

실행할 때 "F"키 less는와 비슷한 "추적"을 수행 tail -f하지만 여기서 원하는 것을 얻을 수 있는지 확실하지 않습니다.


5

나는 일반적으로 G출력을 한 번만 꼬리에 입력합니다. CIFS와 같은 네트워크 파일 시스템을 통해 특히 도움이됩니다.


적은 양으로 열린 파일을 주문형으로 새로 고칩니다. 파일 끝으로 이동하는 것 외에도 파일이 변경된 경우 다시로드합니다.
jorb

1
감사. 처음에는 새로 고쳐지지 않았지만 이제는 제대로 작동하는 것 같습니다. 남자에서는 파일을 새로 고치지 않습니다. man less: 'G 또는> 또는 ESC-> 파일에서 N 행으로 이동하십시오. 기본적으로 파일의 끝입니다.' 오래된 잘못된 댓글을 삭제했습니다. 죄송합니다.
Yaroslav Nikitenko

1
BTW, 당신은 무엇을 '일회성 기준'이라고 부릅니까? lessMark Nudelman 의 관리자는 다음과 같이 대답했습니다. "G 명령은 일반적으로 R 명령처럼 파일을 다시 읽도록 강제하지 않습니다. G 일 때 파일의 끝을 아직 읽지 않은 경우에는 그렇게 보일 수 있습니다. 예를 들어, G로 끝으로 점프 한 다음 1G로 시작으로 건너 뛰면 다른 프로그램에서 데이터를 수정합니다. 파일의 끝 (길이를 변경하지 않고), "(계속)
Yaroslav Nikitenko

(계속) "G로 끝까지 다시 점프하면 수정 된 데이터가 표시되지 않습니다. 그러나 처음으로 다시 점프하지 않으면 G 명령을 처음 실행할 때 읽어야합니다. 거기에 처음으로 데이터, 그리고 적은 덜 처음 호출 이후 발생한 모든 수정 사항을 볼 수 있습니다. "
Yaroslav Nikitenko

이 경우 원래 질문에서 묻는 부분의 일부인 동적 새로 고침과 달리 일회성 새로 고침이라고 언급했습니다 .
jorb

1

vim을 사용하여 파일을 읽은 후 파일에 다음 맵핑을 추가하면 다음을 사용하여 .vimrc파일을 쉽게 다시로드 할 수 있습니다 ,r.

let mapleader = ","
nnoremap <leader>r :edit <CR>

파일을 이미 편집 한 경우 vim이 불평합니다. 그냥로 변경

let mapleader = ","
nnoremap <leader>r :edit! <CR>

변경 사항을 무시합니다.


vim차갑고 죽은 손에서 튀어 나와야 합니다. 질문의 맥락은에 관한 less것이지만, 독신 경향이있는 사람은 동정합니다!
Benjamin R

1

R다시 그리기를 위해 항상 파일을 다시로드하지는 않습니다. [1]

항상 파일을 다시로드하는 해결 방법은을 눌러 hq도움말 페이지를 연 다음 종료합니다. 파일을 다시로드해야하는 부작용이 있습니다.


[1] 다음은 R다시로드되지 않는 상황의 예입니다 .

  • >>>변경 : 다시로드받을 수 있나요
  • sed -i, gEdit, TextEdit : 다시로드하지 마십시오
  • Linux에서 vi변경 사항 : DO 다시로드
  • Mac에서 vi변경 사항 : 다시로드하지 마십시오

차이가 inode 변경 여부에 달려 있다고 생각합니다 (으로 확인할 수 있음 ls -i foo.txt). inode가 변경되면 R작동하지 않습니다.


0

tail -f대신 파이프로 연결할 수 있으며 결과를 따르게됩니다. 그래도 출력을 통해 이동 (스크롤) 할 수있는 능력을 잃을 것입니다.


0

브라우저를 사용하지 않으려면 다음 명령으로 Algernon 웹 서버를 시작할 수 있습니다 .

algernon -a -t /directory/name

그러면 http : // localhost : 3000 / 에 파일 목록이 표시되고 자동으로 새로 고쳐집니다 .


스레드가 잘못 되었습니까? ..
Tomasz

먼 길이지만 디렉토리를 볼 수있는 방법 인 것 같습니다less
Jeff Schaller

0

방금 다른 사람처럼이 스레드를 발견했습니다. 파일 끝에 이미있을 때의 해결책을 추가하고 싶습니다 .'g '와'G '를 사용하면 파일을 새로 고칩니다.

터미널 프로그램 (SecureCRT)에서 매크로 버튼을 만들었습니다. 매크로는 단순히 'gG'입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.