간단한 예로 =
터미널 창의 전체 너비에 걸쳐 인쇄 할 수있는 CLI 스크립트를 작성하려고합니다 .
#!/usr/bin/env php
<?php
echo str_repeat('=', ???);
또는
#!/usr/bin/env python
print '=' * ???
또는
#!/usr/bin/env bash
x=0
while [ $x -lt ??? ]; do echo -n '='; let x=$x+1 done; echo
답변
tput cols
열 수를 알려줍니다.tput lines
행 수를 알려줍니다.
답변
배쉬에서 $LINES
와 $COLUMNS
환경 변수 트릭을 할 수 있어야합니다. 터미널 크기가 변경되면 자동으로 설정됩니다. (즉, SIGWINCH 신호)
답변
그리고 거기 stty
에서, 로 coreutils
$ stty size
60 120 # <= sample output
행과 열의 수 또는 높이와 너비를 각각 인쇄합니다.
그럼 당신은 사용할 수 있습니다 cut
또는 awk
당신이 원하는 부분을 추출 할 수 있습니다.
그것은 stty size | cut -d" " -f1
높이 / 라인과 stty size | cut -d" " -f2
너비 / 열을위한 것입니다.
답변
yes = | head -n$(($(tput lines) * $COLUMNS)) | tr -d '\n'
답변
Windows CLI 환경 에서이 작업을 수행하려면 가장 좋은 방법은 mode 명령을 사용하고 출력을 구문 분석하는 것입니다.
function getTerminalSizeOnWindows() {
$output = array();
$size = array('width'=>0,'height'=>0);
exec('mode',$output);
foreach($output as $line) {
$matches = array();
$w = preg_match('/^\s*columns\:?\s*(\d+)\s*$/i',$line,$matches);
if($w) {
$size['width'] = intval($matches[1]);
} else {
$h = preg_match('/^\s*lines\:?\s*(\d+)\s*$/i',$line,$matches);
if($h) {
$size['height'] = intval($matches[1]);
}
}
if($size['width'] AND $size['height']) {
break;
}
}
return $size;
}
도움이 되길 바랍니다.
참고 : 반환 된 높이는 버퍼의 줄 수이며 창에 표시되는 줄 수는 아닙니다. 더 나은 옵션이 있습니까?
답변
POSIX에서는 궁극적으로 TIOCGWINSZ
(Get WINdow SiZe) ioctl()
호출을 호출 하려고 합니다. 대부분의 언어에는 일종의 래퍼가 있어야합니다. 예를 들어 Perl에서는 Term :: Size를 사용할 수 있습니다 .
use Term::Size qw( chars );
my ( $columns, $rows ) = chars \*STDOUT;
답변
내가 lyceus answer에서 언급했듯이, 영어가 아닌 로케일 Windows에서는 그의 출력에 mode
하위 문자열 “columns”또는 “lines”가 포함되지 않을 수 있기 때문에 코드가 실패합니다 .
텍스트를 찾지 않고 올바른 하위 문자열을 찾을 수 있습니다.
preg_match('/---+(\n[^|]+?){2}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
신뢰할 수 없기 때문에 줄을 귀찮게하지 않습니다 (실제로 신경 쓰지 않습니다).
편집하다: Windows 8 (oh you …)에 대한 의견에 따르면 이것이 더 신뢰할 수 있다고 생각합니다.
preg_match('/CON.*:(\n[^|]+?){3}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
테스트하지 않았으므로 테스트 해보십시오.