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

Jen*_* S. 2 bash cygwin

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

所以这个输出随着时间推移出现

迭代1:

---
---
---
Run Code Online (Sandbox Code Playgroud)

迭代2:

*--
---
---
Run Code Online (Sandbox Code Playgroud)

迭代5:

***
*--
---
Run Code Online (Sandbox Code Playgroud)

诀窍是跨越垂直线.

如果不跨越垂直线,则很容易使用回声.我可以使用\ b向后移动一个空格并覆盖以前的字符:

echo -n -e "\b"
Run Code Online (Sandbox Code Playgroud)

但是你如何向前移动一条线并覆盖前一条线.

bos*_*bos 7

您使用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
Run Code Online (Sandbox Code Playgroud)

所以

$ echo -e '\033[8Chello'
        hello
Run Code Online (Sandbox Code Playgroud)