Bash 스크립트 내에서 셸 변수 $COLUMNS 참조

Bash 스크립트 내에서 셸 변수 $COLUMNS 참조

이는 xterm:에서는 예상대로 실행되지만 xterm : 과 같은 스크립트에서는 실행 sha512sum <filename> | cut -c -$COLUMNS되지 않습니다 . 말하자면 알 수 없기 때문입니다.#! /bin/bashdothis.sh <args>$COLUMNS

$COLUMNS를 매개변수로 전달하거나 환경으로 내보내지 않는 것이 좋습니다.

스크립트는 중요하지 않습니다. 한 시스템의 xterm 명령줄에서 실행하면 됩니다.

Linux pre 3.2.0-4-amd64 #1 SMP Debian 3.2.81-2 x86_64 GNU/Linux
GNU bash, version 4.2.37
XTerm(278)

답변1

bash는 쉘 변수를 설정 COLUMNS하고LINES인터렉티브모델(문제가 있음사이즈 확인이러한 구별로 이어지는 특성). 이 정보는 다양한 방법으로 얻을 수 있습니다.

질문의 맥락에서 쉘 스크립트를 만드는 방법을 알고 있지만 유용한 데이터를 어디서 얻을 수 있는지 확신할 수 없습니다.

내 창에는 40개의 행과 80개의 열이 있습니다.

  • tput cols먼저 환경 변수를 시도한 다음(사용자 환경에 설정되지 않았으므로 괜찮습니다) 시스템의 터미널 설정, 터미널 설명을 시도합니다. 터미널 설명에 차원을 넣는 것은 더 이상 bash와 같은 termcap 응용 프로그램에서 사용되는 버팀목입니다. 예를 들어 다음과 같은 숫자만 받게 됩니다.

    40

    역사적 실패로 인해 FreeBSD 시스템에서 (참조역사그리고이식성주석)을 사용해야 합니다.tput co, 왜냐하면 (terminfo와 함께 ncurses를 시스템 라이브러리로 사용하더라도) ncurses'tputFreeBSD와 함께 사용하지 마십시오. 물론 NetBSD와 OpenBSD는 다른 방향으로 방향을 틀었습니다.

  • stty size(많은 플랫폼에서 사용 가능) 터미널 설정에서 행/열 값을 제공합니다. 이 값을 사용할 수 없으면 아무것도 제공되지 않습니다. 셸에서 쉽게 분할할 수 있는 두 개의 숫자만 제공합니다.

    40 80

  • resize터미널 자체를 시도해보고(이스케이프 시퀀스 사용) 터미널 설정을 업데이트하여 일치시키십시오. Bash의 경우 다음을 사용할 수 있습니다.resize -u, 다음 출력을 제공합니다.

    열=80;
    행=40;
    열 라인 내보내기;

cron터미널이 관련되지 않기 때문에 이러한 옵션 중 어느 것도 많이 사용되지 않습니다 . 하지만 터미널에서는 모두 사용할 수 있습니다.

답변2

COLUMNS=$(tput cols)

아니면 한 줄로

sha512sum <filename> | cut -c -"$(tput cols)"

관련 정보