2011-11-30 81 views
2

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

所以这个输出会出现随时间:

迭代1:

--- 
--- 
--- 

迭代2:

*-- 
--- 
--- 

迭代5:

*** 
*-- 
--- 

诀窍是跨越垂直线。

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

echo -n -e "\b" 

但是,如何向上移动一行并覆盖以前的行。

回答

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 

所以

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