如何在bash中垂直替换控制台输出

如何在bash中垂直替换控制台输出,bash,cygwin,Bash,Cygwin,我正在使用Bash(cygwin),我想实现一个跨越垂直线的进度指示器。它替换控制台输出,不附加到控制台输出。它需要看起来像一个动画 因此,此输出会随着时间的推移而出现: 迭代1: --- --- --- 迭代2: *-- --- --- 迭代5: *** *-- --- 诀窍是跨越垂直线 如果不跨越垂直线,echo很容易实现。我可以使用\b向后移动空格并覆盖以前的字符: echo -n -e "\b" 但是如何上移一行并覆盖以前的行呢 使用ANSI转义序列移动光标: \033[NA

我正在使用Bash(cygwin),我想实现一个跨越垂直线的进度指示器。它替换控制台输出,不附加到控制台输出。它需要看起来像一个动画

因此,此输出会随着时间的推移而出现:

迭代1:

---
---
---
迭代2:

*--
---
---
迭代5:

***
*--
---
诀窍是跨越垂直线

如果不跨越垂直线,echo很容易实现。我可以使用\b向后移动空格并覆盖以前的字符:

echo -n -e "\b"

但是如何上移一行并覆盖以前的行呢

使用ANSI转义序列移动光标:

\033[NA   - cursor up N lines
\033[NB   - cursor down N lines
\033[NC   - cursor right N steps
\033[ND   - cursor left N steps
所以

$ echo -e '\033[8Chello'
        hello