Shell 一个终端是如何实现的;ASCII动画“;工作

Shell 一个终端是如何实现的;ASCII动画“;工作,shell,command-line,Shell,Command Line,我称之为ASCII动画,因为没有更好的词。我指的是一个加载条,比如说像在pacman(arch package manager)中,它是这样开始的 [ ] 随着时间的推移,这 [#### ] 从我对stdout的理解来看,我似乎无法理解这个看似简单的功能。我希望 [ ] [# ] [### ] ... 我不明白的是,它如何能够在标准输出上打印(如果它真的这样做的话)。我们有时认为终端只是显示文本,但它们实际上更像浏览

我称之为ASCII动画,因为没有更好的词。我指的是一个加载条,比如说像在<代码>pacman(arch package manager)中,它是这样开始的

[          ]
随着时间的推移,这

[####      ]
从我对stdout的理解来看,我似乎无法理解这个看似简单的功能。我希望

[          ]
[#         ]
[###       ]
...

我不明白的是,它如何能够在标准输出上打印(如果它真的这样做的话)。

我们有时认为终端只是显示文本,但它们实际上更像浏览器,以控制字符和ANSI终端转义码的形式呈现自己的小标记

简单的单行动画通常使用回车控制字符完成。通过写入回车符,光标将返回到最左边的空白处,因此您可以在该行上重复写入任意次数

显然,您会使用循环,但为了清晰起见,这里有一个示例:

{
  printf '[##    ]'
  sleep 1
  printf '\r[###   ]'
  sleep 1
  printf '\r[####  ]'
}
对于更高级的动画,例如,您可以通过将特殊ANSI转义序列写入文本来任意定位光标。
tput
工具在shell脚本中对此很有帮助,并且
tput cup 4 50
将输出一个ANSI序列,以将光标移动到第4行第50列。这相当于
printf'\x1B[4;50H'
,只需向终端写入一段魔法文本

以下是用于starfield动画的功能(ctrl-c退出):


甚至像
top
nano
这样的工具也会通过仔细编写文本和控制字符来创建颜色、线条、刷新列表等来显示它们所显示的内容。

我们有时认为终端只是显示文本,但实际上它们更像浏览器,以控制字符和SI终端转义码

简单的单行动画通常使用回车符控制字符来完成。通过写入回车符,光标将返回到最左侧的边距,因此您可以根据需要在该行上再次写入

显然,您会使用循环,但为了清晰起见,这里有一个示例:

{
  printf '[##    ]'
  sleep 1
  printf '\r[###   ]'
  sleep 1
  printf '\r[####  ]'
}
对于更高级的动画,例如,您可以通过将特殊的ANSI转义序列写入文本来任意定位光标。
tput
工具在shell脚本中对此很有帮助,并且
tput cup 4 50
将输出ANSI序列以将光标移动到第4行第50列。这相当于
printf'\x1B[4;50H'
,只需向终端写入一段魔法文本

以下是用于starfield动画的功能(ctrl-c退出):

甚至像
top
nano
这样的工具也通过仔细编写文本和控制字符来创建颜色、线条、刷新列表等来显示它们所显示的内容