从字面上看,我想打印到终端上的任何显示行。我记得我们在大学里就学过这个,但那是很久以前的事了。有这个命令吗?
像这样:
___________ ___________ |blah | |blah | |bla | |blah | |randomtext | |blah | |xy | -----> |blah | |hjkl | |blah | |prompt> | |prompt> | |___________| |___________|
答案1
tput cup
您可以使用命令将光标移动到任意 X,Y 坐标
例如
tput cup 10 3
将带您到第 10 行第 3 列(坐标从左上角 0,0 开始)
所以一个简单的脚本,例如
clear
echo line 1
echo line 2
echo line 3
tput cup 1 5
echo another line
tput cup 10 0
将导致类似的输出
line 1
line another line
line 3
$
(其中 是$
您的提示)。
第一个tput
命令将光标移回到前面的行,允许echo
覆盖已经存在的内容。
答案2
存在xterm 控制序列提供了多种方式来破坏终端显示,通常是通过命令tput(1)
或curses
库。或者冒着可移植性问题的风险,您可以直接发出转义序列。
#!/usr/bin/env zsh
tput sc
for i in {1..10}; do
echo -ne "\x1b[${i};${i}H\x1bKblah"
done
tput rc
终端也可以进入原始模式,然后读取光标位置,良好的读取可能是线路噪声库看看这是如何完成的。