こんにちは河野です。新年早々小ネタです。
先日何かのログを眺めているときに、SIGWINCHというのを見かけました。何かのシグナルっぽいです。
SIGWINCHとは?
何かと思って調べてみたら、ターミナルのサイズ変更を知らせるシグナルでした。
動作確認してみる
bash,zshには
- LINES
- COLUMNS
という環境変数があるのですが、スクリプトにしたら上手く取得できませんでした。
なので、tputというコマンドを使います。tputではターミナルの情報が取得できます。
以下のスクリプトで動作確認してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash function echo_term_size() { lines=$(tput lines) columns=$(tput cols) echo "SIZE: $lines * $columns" } trap 'echo_term_size' SIGWINCH echo_term_size while true; do sleep 1 done |
実行して、ウィンドウサイズを変更すると以下のようになりました。
1 2 3 4 5 6 7 8 |
$ ./sigwinch_trap.sh SIZE: 58 * 268 SIZE: 51 * 109 SIZE: 50 * 59 SIZE: 22 * 114 SIZE: 24 * 223 SIZE: 36 * 184 ^C |
sleep中でもtrapは実行されるようで、1秒おきにサイズが表示されました。
具体的な使い道は全然思い浮かばないのですが、CUIのアプリなど作るときには何か使えるかも知れませんね!