스크롤 가능한 호출기에서 명령 출력 보기

스크롤 가능한 호출기에서 명령 출력 보기

위에서 명령의 출력을 보고 터미널이 아래로 점프하는 것을 방지하고 싶고 터미널 독립적인 방법을 원합니다. 따라서 터미널의 특정 구성을 변경할 필요가 없습니다. less다음과 같은 명령을 사용해 보았습니다 .

command | less

그러나 내가 사용하는 명령에서는 명령 출력이 완료된 후 호출기가 종료됩니다.

호출기로 실시간 스트리밍하기 위한 명령 출력을 얻으려면 어떻게 해야 합니까? 위에서 아래로 볼 수 있습니까?

답변1

입력이 완료되면 종료하지 마세요.

기본적으로 quit 명령( q)을 사용하지 않는 한 less는 자동으로 종료되지 않습니다.

less옵션을 사용하여 호출 하면 -E파일 끝에 도달하면 종료됩니다. 옵션을 사용하면 -e파일 끝을 지나 이동하려고 할 때(예: 반복적으로 스크롤하여) 종료됩니다. -F파일이 한 화면에 완전히 맞으면 less 옵션이 즉시 종료됩니다. 이러한 옵션은 기본적으로 활성화되어 있지 않지만 시스템에서 기본 옵션으로 설정하는 방법에는 여러 가지가 있습니다.

  • less옵션이 있는 쉘 별칭일 수 있습니다. 으로 확인하세요 alias less.
  • LESSLess가 시작되면 환경 변수에서 옵션을 읽습니다. 으로 확인하세요 echo $LESS.
  • Less에는 구성 파일이 있습니다. 기본 위치는 .less홈 디렉터리입니다. 이는 환경 변수를 설정하여 변경할 수 있습니다 LESSKEY. 파일 형식은 바이너리이지만 옵션을 이렇게 설정하면 LESS파일에 문자열과 옵션이 모두 표시됩니다.
  • 그럴 가능성은 낮지만 환경 변수가 설정된 경우 less는 기본적으로 파일 끝에서 종료하는 것을 포함하여 LESS_IS_MORE이전 유틸리티처럼 동작합니다 .more

완료 전 명령 출력 보기

명령 입력을 less( mycommand | less)로 파이프하면 less는 명령이 완료될 때까지 계속해서 읽습니다. Interrupt less 를 사용할 수 있지만 Ctrl+C이 경우 명령에서 더 이상 출력을 읽을 수 없으며 파이프가 끊어져 명령이 종료될 수 있습니다. 이는 Less가 읽기를 중지할 때 파이프를 닫기 때문입니다.

이 문제에 대한 해결책은 명령을 파일로 출력하고 파일에서 less를 호출하는 것입니다. less가 파일에서 데이터를 읽는 동안 입력 F하고 Ctrl+C파일에서 더 많은 데이터를 읽도록 한 다음 탐색을 계속할 수 있습니다.

mycommand >log 2>&1 &
less log

프로그램은 출력이 터미널인지, 파이프인지, 파일인지에 따라 약간 다르게 동작할 수 있습니다. 출력이 터미널이 아닌 파일이나 파이프일 때 출력이 지연되는 것을 발견하면 이는 출력 때문입니다.완충기. 바라보다파이프라인에서 버퍼링 끄기

이것script유용가상 터미널에서 프로그램을 실행하고 전체 출력을 파일에 기록합니다. 프로그램에 관한 한 터미널에 출력을 씁니다. 예를 들어, 프로그램은 색상 이스케이프 시퀀스를 사용할 수 있습니다. -R제어 문자를 이스케이프 형식으로 표시하는 대신 터미널 이스케이프 시퀀스를 터미널에 전달하도록 하려면 less 옵션을 전달합니다 .

script -c 'mycommand --option || echo "mycommand failed with status $?"' mycommand.log </dev/null >/dev/null &
less -R mycommand.log

답변2

문제는 less어떤 이유로 stderr 출력을 다음으로 리디렉션하지 않는다는 것입니다.

command 2>&1 | less 

원하는 동작을 생성합니다.

를 사용하면 less -R리디렉션에서 컬러 출력을 보존할 수 있지만 일부 명령은 출력을 리디렉션할 때 자동으로 컬러 출력을 생략하므로 항상 컬러 출력을 얻는 command것과 같은 옵션을 찾아야 합니다 .--color=always

제 경우에는 이제 출력을 다음으로 리디렉션합니다.batcat, 더 많은 기능과 옵션이 있는 의 복제본 --paging=always이며 s 옵션을 사용합니다.--pager="less -RFX"--numbercargo build--color=always

cargo build --color=always 2>&1 | bat --paging=always --pager="less -RFX" --number

그러면 번호가 매겨진 줄이 포함된 훌륭하고 스크롤 가능한 컬러 출력이 생성됩니다.

   1    Compiling openlimits v0.1.0 (/home/####/git/openlimits)
   2 error[E0433]: failed to resolve: use of undeclared type or module `tokio`
   3   --> src/binance/client/websocket.rs:15:5
   4    |
   5 15 | use tokio::net::TcpStream;
   6    |     ^^^^^ use of undeclared type or module `tokio`
   7
   8 error[E0433]: failed to resolve: use of undeclared type or module `tokio_tungstenite`
   9   --> src/binance/client/websocket.rs:16:5
  10    |
  11 16 | use tokio_tungstenite::{
  12    |     ^^^^^^^^^^^^^^^^^ use of undeclared type or module `tokio_tungstenite`
  13
  14 error[E0433]: failed to resolve: use of undeclared type or module `tokio`
  15   --> src/coinbase/client/websocket.rs:10:5
  16    |
  17 10 | use tokio::net::TcpStream;
  18    |     ^^^^^ use of undeclared type or module `tokio`
  19
....

그런 다음 옵션을 구성 파일에 넣고 이를 암시적 bat으로 cargo만들었고 이제 입력할 때 이 동작이 나타납니다.

cargo build 2>&1 | bat

&>Bash에서는 분명히 대신 사용할 수 있습니다 2>&1.그것들은 동일합니다. zsh에서는 이것이 작동하지 않는 것 같습니다.이렇게 녹음되어 있긴 하지만.

관련 정보