我知道我可以回去,并用r覆盖它的内容。
现在我怎么能进入前一行来改变呢?
还是有甚至有一种方法来打印到控制台窗口中的特定光标位置?
我的目标是用PHP创build一些自我刷新的多线控制台应用程序。
Go编译器有一个窗口设置选项吗?
控制台中的铃声挂起Windows 7
Windowsbatch file将文本块打印到控制台
自定义控制台使用git bash
Python – 在Windows上运行一个提示I / O的简单命令行程序,并“代理”它
使用ANSI转义码移动光标。 例如: Esc [ 1 F 要将Escape字符放在字符串中,您需要用数字方式指定其值,例如“ x1B [1F”
正如sujoy所建议的那样 ,您可以使用PHP ncurses以更抽象的方式移动光标。
虽然大多数“控制台”允许ANSI转义码,但其他类型的终端使用不同的字符序列, ncurses提供了一个独立于终端的标准化API。 如果您有兴趣,请快速浏览/etc/termcap (然后查看man terminfo )。
更新: lars Wirzenius的答案有一个有用的背景总结。 几年前我也写了一篇关于终端的短文。
Linux虚拟控制台模拟旧式的显示终端,虽然不完美。 有关硬件的示例,请参阅VT-100上的维基百科 。
这些终端从串口读取数据,并将其显示在屏幕上。 他们还从串口查找输入流中的特殊字节,并以其他方式对其进行操作。 例如,换行符(' n',字节值10)将到达下一行的开始处,并且回车符(' r',字节值13)将走到当前行的开始处。
更有趣的是,一个ASCII ESC字节(27)将启动一个命令序列,几乎所有的事情都可以在光标或显示器上进行。 一个这样的序列可能会将光标移动到屏幕的左上角,而另一个则会移动到给定的行和列。 第三个可能会清除屏幕,第四个可能会使文本以相反的颜色显示。
每个终端制造商都会发明自己的命令序列(而且他们并不总是以ESC开头),然后根据他们的硬件新版本做些什么来改变它们。 如果制造商添加了颜色或简单的图形,则会产生新的序列。
将每个应用程序调整到每个终端,每个命令序列的更改都将是一项艰巨的任务。 将它与适应每个Web应用程序到一个新的浏览器版本进行比较。
像往常一样,解决方案是添加一个抽象层。 在Unix中,最初的抽象称为termcap ,由文件/etc/termcap和一个用于读取文件的库组成。 该文件将指定为每个终端型号的每个逻辑操作发送的实际命令序列。 所以一个vt102终端机型会将操作“清屏”映射到 33[2J 。 这使应用程序员能够根据逻辑运算来思考,这更简单得多。
当然,还不够简单… termcap库并不如其它的,所以另外两个库被开发出来了: curses提供了一个更高的抽象层次,包括用户输入,terminfo使得终端定义和它们的使用程序员更容易。
在现代, ncurses是一个免费的curses重新实现,而terminfo几乎完全取代了termcap 。 此外,ANSI已经定义了一些基于数字终端的“标准”序列,几乎每个终端仿真器都使用这些序列,至少大部分都是这样,而Linux虚拟控制台就是其中之一。 很少有人有实际的物理终端了。
对于你想要做的, ncurses或者tput命令可能是最有用的。 或者你也可以决定只清除整个屏幕(见clear (1)),然后写输出是最简单的。
我的目标是用PHP创建一些自我刷新的多线控制台应用程序
对于你正在努力实现ncurses是要走的路。
你应该阅读关于ncurses。 在shell中,你可以通过以下方式排队:
tput cuu1
查看man terminfo获取更多选项。 但执行shell命令来移动光标是相当绝望的。
你只要你键盘上的上下箭头滚动浏览控制台的历史记录,但也有历史命令。 了解更多使用男人的历史
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。