이는 xterm:에서는 예상대로 실행되지만 xterm : 과 같은 스크립트에서는 실행 sha512sum <filename> | cut -c -$COLUMNS
되지 않습니다 . 말하자면 알 수 없기 때문입니다.#! /bin/bash
dothis.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'tput
FreeBSD와 함께 사용하지 마십시오. 물론 NetBSD와 OpenBSD는 다른 방향으로 방향을 틀었습니다.stty size
(많은 플랫폼에서 사용 가능) 터미널 설정에서 행/열 값을 제공합니다. 이 값을 사용할 수 없으면 아무것도 제공되지 않습니다. 셸에서 쉽게 분할할 수 있는 두 개의 숫자만 제공합니다.40 80
resize
터미널 자체를 시도해보고(이스케이프 시퀀스 사용) 터미널 설정을 업데이트하여 일치시키십시오. Bash의 경우 다음을 사용할 수 있습니다.resize -u
, 다음 출력을 제공합니다.
열=80; 행=40; 열 라인 내보내기;
cron
터미널이 관련되지 않기 때문에 이러한 옵션 중 어느 것도 많이 사용되지 않습니다 . 하지만 터미널에서는 모두 사용할 수 있습니다.
답변2
COLUMNS=$(tput cols)
아니면 한 줄로
sha512sum <filename> | cut -c -"$(tput cols)"