Меня немного смущает взаимодействие между 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
изменяется в соответствии с новым размером терминала. Однако при работе в da sh вывод tput
не изменяется, даже если размер терминала изменился. Также обратите внимание, что обработчик WINCH, кажется, задерживается на da sh и не выполняется до тех пор, пока не будет введена следующая команда (но до того, как она выполнится). Что здесь должно произойти? tput
как-то заботится о том, что делает оболочка? Является ли лебедка вообще актуальной? Я предполагаю, что вопрос:
Как tput
знает размер терминала?
Кроме того, я не хотел слишком сильно загромождать вывод, но в каждой оболочке Например, TERM установлен и infocmp $TERM
выводит описания terminfo, которые кажутся действительными. (Тот факт, что он дает какой-либо вывод, я думаю, указывает на то, что это действительные данные!)