위에서 명령의 출력을 보고 터미널이 아래로 점프하는 것을 방지하고 싶고 터미널 독립적인 방법을 원합니다. 따라서 터미널의 특정 구성을 변경할 필요가 없습니다. less
다음과 같은 명령을 사용해 보았습니다 .
command | less
그러나 내가 사용하는 명령에서는 명령 출력이 완료된 후 호출기가 종료됩니다.
호출기로 실시간 스트리밍하기 위한 명령 출력을 얻으려면 어떻게 해야 합니까? 위에서 아래로 볼 수 있습니까?
답변1
입력이 완료되면 종료하지 마세요.
기본적으로 quit 명령( q
)을 사용하지 않는 한 less는 자동으로 종료되지 않습니다.
less
옵션을 사용하여 호출 하면 -E
파일 끝에 도달하면 종료됩니다. 옵션을 사용하면 -e
파일 끝을 지나 이동하려고 할 때(예: 반복적으로 스크롤하여) 종료됩니다. -F
파일이 한 화면에 완전히 맞으면 less 옵션이 즉시 종료됩니다. 이러한 옵션은 기본적으로 활성화되어 있지 않지만 시스템에서 기본 옵션으로 설정하는 방법에는 여러 가지가 있습니다.
less
옵션이 있는 쉘 별칭일 수 있습니다. 으로 확인하세요alias less
.LESS
Less가 시작되면 환경 변수에서 옵션을 읽습니다. 으로 확인하세요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
제 경우에는 이제 출력을 다음으로 리디렉션합니다.bat
cat
, 더 많은 기능과 옵션이 있는 의 복제본 --paging=always
이며 s 옵션을 사용합니다.--pager="less -RFX"
--number
cargo 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에서는 이것이 작동하지 않는 것 같습니다.이렇게 녹음되어 있긴 하지만.