我对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 处理程序为什么执行两次),并且tput
更改的输出与新的终端大小相匹配。但是,当在 dash 中运行时,tput
即使终端改变了大小,输出也不会改变。另请注意,WINCH 处理程序似乎被破折号延迟,并且直到输入下一个命令之后(但在它执行之前)才执行。这里应该发生什么?tput
以任何方式关心外壳在做什么吗?绞盘是否相关?我想问题是:
怎么tput
知道终端的大小?
此外,我不想过多地混淆输出,但在示例的每个 shell 中,都设置了 TERM 并infocmp $TERM
打印似乎有效的 terminfo 描述。(我认为,它提供任何输出的事实表明它是有效数据!)