如何在 shell 中用 echo 或 printf 覆盖多行?
How can I overwrite multiple lines with echo or printf in shell?
我有一些 shell 功能,一个在多行上将一些 ASCII 艺术画到屏幕上,例如:
printf %s '
______________
||__________||
'
sleep 1
clear
printf %s '
______________
||__________||
||
||
||
'
sleep 1
clear
printf %s '
______________
||__________||
||
||
||
||‾‾‾‾‾‾‾‾‾‾||
‾‾‾‾‾‾‾‾‾‾‾‾‾‾
'
有没有办法在不清除屏幕的情况下覆盖字符串?我试过在每一行和最后一行使用 \r 但这似乎只能替换一行字符串。
这完全取决于您的终端。许多终端允许发送转义序列将光标移动到起始位置。这可能作为 terminfo(1) 命令可用
tput home
printf 'Cursor now home\n'
如果有,请参阅 man terminfo
。如果不是,您需要告诉我们您的 TERM
环境变量 (echo $TERM
) 的值。
我有一些 shell 功能,一个在多行上将一些 ASCII 艺术画到屏幕上,例如:
printf %s '
______________
||__________||
'
sleep 1
clear
printf %s '
______________
||__________||
||
||
||
'
sleep 1
clear
printf %s '
______________
||__________||
||
||
||
||‾‾‾‾‾‾‾‾‾‾||
‾‾‾‾‾‾‾‾‾‾‾‾‾‾
'
有没有办法在不清除屏幕的情况下覆盖字符串?我试过在每一行和最后一行使用 \r 但这似乎只能替换一行字符串。
这完全取决于您的终端。许多终端允许发送转义序列将光标移动到起始位置。这可能作为 terminfo(1) 命令可用
tput home
printf 'Cursor now home\n'
如果有,请参阅 man terminfo
。如果不是,您需要告诉我们您的 TERM
环境变量 (echo $TERM
) 的值。