Bash スクリプト内でターミナルウィンドウのサイズを取得する
Bash スクリプト内で、ターミナルウィンドウのサイズを取得し、ウィンドウサイズの変更を監視する方法があった。
#!/usr/bin/env bash
declare -x rows cols # 環境変数として定義する (`export` もされている)
function on_winch() {
rows="$(tput lines)" # ${LINES}
cols="$(tput cols)" # ${COLUMNS}
# ウィンドウサイズが変わった時にココでなにか処理する
echo "[DEBUG] On WinCh : ${rows} lines X ${cols} columns"
}
trap on_winch WINCH
こんな風に、trap
というコマンドを使うと、JavaScript でいう window.addEventListener()
みたいなことができる。
ウィンドウサイズは tput
コマンドで取得しているが、Bash の組み込み変数に ${LINES}
と ${COLUMNS}
というモノもあって、コチラでも同値が取れた。
ついでに、ウィンドウを指定のサイズにリサイズする printf
特殊文字も見つけたのだが、MacOS の Terminal.app では動作して、VSCode 内のターミナルでは動作しない、といった感じ。まぁそりゃそうか。w
# ウィンドウサイズを 50 Lines × 100 Columns に変更する
printf '\033[8;50;100t'
ついでに、今まで自分は #!/bin/bash
と Shebang を書いていたのだが、#!/usr/bin/env bash
の方がよりポータブルだと書かれていて確かに〜〜と思ったので、今後はコチラの Shebang に変えていこうと思う。