간단한 건 알지만 위치/이름이 기억나지 않습니다.
터미널의 현재 너비에 대한 변수는 어디에 저장되어 있나요?
나는 변화에 대해 이야기하는 이 답변을 보았습니다. SSH 및 텔넷을 통해 터미널 길이와 너비는 어떻게 전달됩니까?
하지만 스크립트에서 사용할 현재 값을 얻고 싶습니다(그리고 그 답변의 모든 내용을 이해하지 못합니다).
옛날 옛적에 모든 환경 변수를 표시하는 방법이 있었던 것을 기억합니까? (글쎄, set
(with env
)를 사용하라는 답변을 보았는데 , 내 set
것은 선만 표시하고 너비는 표시하지 않았습니까?)
그런 다음 물론 다음 질문이 나옵니다. $number가 있으면 한 문자("-")를 여러 번 반복하여 점선을 X 문자 너비로 만들고 싶습니다(단말기 채우기, 개행 없음). 이 작업을 수행하는 방법에 대한 우아한 방법이 있으면 감사하겠습니다.
답변1
크기
표준적인 방법은 실제 크기를 알고 싶을 때 터미널에 문의하는 것입니다.
stty size
행과 열을 인쇄합니다.
점선 인쇄
두 번째 질문에 관해서는, seq
당신은 친구입니까?
stty size|if read rows cols
then for x in `seq $cols`
do printf "-"
done fi
또는 모든 awk
루프
stty size|awk '{ ORS="-"; n=$2; for (i=0; i<n; ++i) { print ""; } }'
.
행 변수 설정
하지만 실제로 행을 변수에 저장하는 것이 더 좋습니다.
eval $(L=""; stty size|if read r c
then for x in `seq $c`
do L="${L}-"
done
echo L="$L"
fi
)
SIGWINCH의 함정
터미널 크기를 다시 계산할 필요가 없는 한
trap 'echo "recalculate L"' SIGWINCH
이제 이를 사용하여 $L
라인을 인쇄할 수 있습니다. 물론 $L
변수를 자동으로 조정할 수도 있습니다 SIGWINCH
.
trap 'eval $(L=""; stty size|if read r c
then for x in `seq $c`
do L="${L}-"
done
echo L="$L"
fi
)' SIGWINCH
. 설정한 터미널에서 trap
다음과 같이 말할 수 있습니다.
echo $L
이제 끝났습니다.
답변2
아니요환경터미널의 너비를 포함하는 변수입니다. 하나 있다껍데기변수: ( COLUMNS
키와 동일). LINES
이는 단지 쉘 변수일 뿐이며 쉘에서 호출하는 프로그램에는 표시되지 않습니다.
그 이유 COLUMNS
는 단순히 변수가 환경에 있으면 쉘이 이를 수정할 수 없기 때문에 쉘 변수가 환경으로 내보내지지 않기 때문입니다. 터미널의 크기를 조정하면 셸(또는 더 일반적으로 포그라운드에 있는 모든 프로그램)은SIGWINCH 신호. 쉘이 SIGWINCH를 수신하면 터미널에 현재 크기를 쿼리하고 그에 따라 COLUMNS
및 변수를 업데이트합니다 LINES
.
이 명령은 및 를 set
포함한 모든 쉘 변수를 나열합니다 . 명령 및 환경 변수만 나열되므로 및 는 포함되지 않습니다 .COLUMNS
LINES
env
export
COLUMNS
LINES
내보내서 COLUMNS
환경 변수로 만들 수 있습니다. 그러나 애플리케이션이 이를 사용할 때 터미널 크기가 동시에 조정된 경우 이 정보가 최신 정보가 아닐 수 있다는 점에 유의하십시오. 애플리케이션은 터미널과 동일한 방식으로 터미널 크기를 쿼리하고 SIGWINCH 신호에 대한 핸들러를 등록하여 정보를 최신 상태로 유지할 수 있습니다.
1 올바른 내용을 보내서I/W 제어주문하다. 아니면 전화를 하거나 stty size
또는 tput cols
.
답변3
set
"열" 아래에 있습니다 .
echo $COLUMNS
또는
set | grep -i columns
배쉬에서.
답변4
나는 아마도 당신이 변수를 찾고 있다고 생각합니다 $COLUMNS
.
문자를 터미널의 전체 너비에 걸쳐 만드는 것은 간단한 값 기반 루프입니다 $COLUMNS
. 기록에 있는 줄에 맞춰 화면 크기를 조정하면 보기에 불편해 보일 것입니다.