我为什么要问这个?
正如您所猜测的,这主要是出于好奇。但为什么我的心中却升起了好奇心呢?
好吧,有一段时间,我注意到我不高兴的是,在我跑去clear
清理终端屏幕后,我不得不将眼睛从屏幕底部移开,提示符在一系列命令及其命令之后结束。输出,到屏幕顶部。
那是我将其插入我的~/.bashrc
:
__prompt_to_bottom_line() {
tput cup $LINES
}
alias clear='clear && __prompt_to_bottom_line'
对我来说,运行后底部出现提示clear
意味着提示是总是在底部,永远不会在顶部。其他一切都像正常一样。
其他人呢?
我想我不是唯一一个有这种必要性的人。这个问题,例如:用户希望提示始终位于顶部,输出位于其下方,但以相反的顺序(但是一个命令的一个输出,即使是多行,显然也不会反转)。
如果您考虑一下,用户期望在屏幕上看到的内容正是tac
我所期望的(除了多行输出不会反转)。
所以我的问题是
为什么终端设计有这种不一致的行为?我所说的非统一是指它开始时的情况永远不会重复,除非一个clear
s,并且这将一个又一个命令地改变命令,提示符向下移动到屏幕上,最终提示符最终处于“稳定”位置屏幕底部,从那里它不会再移动,除非有人clear
。
线路始终位于顶部/底部,输出向下/向上推,这不是更护眼的设计吗?
答案1
我指的是终端模拟器以及虚拟控制台。因为在它们两个中我都使用
bash
,但我可以使用另一个 shell,我认为是的,我正在询问 shell 的行为。
终端仿真器行为的历史应该包含在为什么在终端模拟器中输入光标总是从上到下?那里的答案,包括我的答案,都缺少 Lear Siegler ADM 终端的历史概述,因为大部分行为与其演变有关。早期的终端只支持“底线输入”——光标固定在底线;我们今天熟悉的“下线滚动”行为是 ADM-3A 引入的一个选项。
shell 行为这方面的历史是,实际上并不存在:sh
-style shell 不知道终端或其功能。从本质上讲,您的 shell 只关心其输入是否来自以及其输出是否会发送到假装为终端的设备(由下式确定)功能isatty
);它不知道它是否是电传打印机、玻璃终端、终端仿真器或其他终端兼容设备(虚拟的或其他的)。
¹ “从本质上讲”,因为当前sh
风格的外壳的一些特点,例如 select
在 Bash 中,知道终端具有给定数量的列和行。