tput
と端末サイズの相互作用について少し混乱しています。の動作はtput
、それが呼び出されるシェルに依存しているようです。または、シェルが端末設定の変更を担当している可能性があります。問題を軽減するには、次のことを考慮してください。
dash$ exec bash
bash$ trap 'echo winched' WINCH
bash$ tput cols
176
bash$ # changing terminal size now (after hitting return)
bash$ winched
bash$ winched
tput cols
150
bash$ exec dash
dash$ trap 'echo winched' WINCH
dash$ tput cols
150
dash$ # changing terminal size now (after hitting return)
dash$ tput cols
winched
150
ここで、bash では、物事は (ほぼ) 期待どおりに動作し (WINCH ハンドラーが 2 回実行される理由がよくわからないため、ほとんどと言います)、出力はtput
新しい端末サイズに一致するように変更されます。ただし、ダッシュで実行するとtput
、端末のサイズが変わっても出力は変わりません。また、WINCH ハンドラーはダッシュによって遅延しているように見え、次のコマンドが入力されるまで (ただし、実行される前に) 実行されないことに注意してください。ここで何が起こるはずですか?tput
シェルが何をしているか気にしますか?ウインチは関係ありますか?質問は次のとおりだと思います。
tput
端末のサイズはどのようにわかりますか?
また、出力をあまり混乱させたくありませんでしたが、例の各シェルでは TERM が設定され、infocmp $TERM
有効と思われる terminfo の説明が出力されます。(出力が得られるという事実は、それが有効なデータであることを示していると思います!)