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