단일 페이지 입력을 늘리지 않고 끝까지 스크롤

단일 페이지 입력을 늘리지 않고 끝까지 스크롤

무언가를 파이프로 연결 less --quit-if-one-screen +G(별칭 -F +G)할 때 출력이 터미널 크기를 초과하면 덜 열리고 끝까지 스크롤됩니다.

불행하게도 닫기 전에 끝까지 스크롤하여 전체 터미널 화면을 차지합니다. 다음과 같습니다(터미널에 6줄이 있는 경우).

❯ echo hi | less --quit-if-one-screen +G
~
~
~
~
~
hi

이를 방지할 수 있는 방법이 있나요? 즉, 입력이 한 페이지 미만이면 입력을 그대로 유지하고, 한 페이지 미만이면 끝까지 스크롤합니다.

답변1

유일한 방법은 전달한 내용에 따라 별도의 명령을 사용하는 것입니다.

먼저 설명을 위해 두 개의 변수를 생성합니다. 하나는 4줄의 텍스트를 포함하고 다른 하나는 20줄의 텍스트를 포함합니다.

SmallVar=$(cat <<EOF
01 SmallVar
02 A
03 B
04 C
EOF
)
LargeVar=$(cat <<EOF
01 LargeVar
02 A
03 B
04 C
05 D
06 E
07 F
08 G
09 H
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
EOF
)

echo
echo "Lines in SmallVar: $(echo "${SmallVar}" | wc -l)"
echo "Lines in LargeVar: $(echo "${LargeVar}" | wc -l)"
echo "Lines available in terminal: $(tput lines)"
echo

위의 출력은 다음과 같습니다.

Lines in SmallVar: 4
Lines in LargeVar: 20
Lines available in terminal: 15

이것들은 모두 한 줄에 있지만 더 쉽게 읽을 수 있도록 여러 줄로 나눌 수 있습니다. tmpVar전달하는 변수 또는 파일 콘텐츠입니다. (파일 내용을 전달하려는 경우에 작동합니다 tmpVar="$(cat filename.txt")

후보자 목록

tmpVar="${SmallVar}"; if [ $(echo "${tmpVar}" | wc -l) -le $(tput lines) ]; then echo "${tmpVar}" | less -FX; else echo "${tmpVar}" | less +G -FX; fi;

긴 목록

tmpVar="${LargeVar}"; if [ $(echo "${tmpVar}" | wc -l) -le $(tput lines) ]; then echo "${tmpVar}" | less -FX; else echo "${tmpVar}" | less +G -FX; fi;

이것을 별도의 줄로 나누면 읽기가 더 쉬울 수 있습니다.

tmpVar="${SmallVar}";
#tmpVar="${LargeVar}";
if [ $(echo "${tmpVar}" | wc -l) -le $(tput lines) ];
then
    echo "${tmpVar}" | less -FX;
else
    echo "${tmpVar}" | less +G -FX;
fi;

먼저 if변수의 줄 수를 터미널의 줄 수와 비교합니다( tput lines자체적으로 실행하고 창 크기를 조정한 후 다시 실행). 이보다 작거나 같으면 무시됩니다 . 그렇지 않으면 종료 후 화면에 값을 유지하는 데 +G사용됩니다 . 종료를 누르면 화면의 마지막 몇 줄이 지워지지 않고 그대로 유지됩니다.+G-Xq

비교하다

$ tmpVar="${SmallVar}"; if [ $(echo "${tmpVar}" | wc -l) -le $(tput lines) ]; then echo "${tmpVar}" | less -FX; else echo "${tmpVar}" | less +G -FX; fi;
01 SmallVar
02 A
03 B
04 C
$ 

그리고

$ tmpVar="${LargeVar}"; if [ $(echo "${tmpVar}" | wc -l) -le $(tput lines) ]; then echo "${tmpVar}" | less -FX; else echo "${tmpVar}" | less +G -FX; fi;
...........[scroll]...........
07 F
08 G
09 H
10 I
11 J
12 K
13 L
14 M
15 N
16 O
17 P
18 Q
19 R
20 S
(END)

 

관련 정보