0

是否可以在 shell 中更改写入 STDOUT 的行,类似于scp等许多程序的方式?

重点是让我基本上拥有一个自动收报机或某种监视器,而不会在整个屏幕上滚动。

4

3 回答 3

1

您可以使用控制字符和ANSI 转义码来操作终端。例如\b将光标返回一个位置,并将\r其返回到行首。这可以用来制作一个简单的股票代码:

for i in $(seq 10)
do
    echo -en "Progress... $i\r"    # -e is needed to interpret escape codes
    sleep 1
done
echo -e "\nDone."

使用ANSI 转义码,您可以做更多事情,例如清除屏幕的一部分、跳转到您想要的任何位置以及更改输出颜色。

于 2012-05-04T17:17:16.577 回答
1

\r您可以通过打印字符来覆盖最后打印的行。

例如这个:

for i in `seq 1 10`; do
   echo -n $i;
   sleep 1;
   echo -n -e "\r" ;
done

将打印1然后更新它,2依此类推,直到 10。

于 2012-05-04T17:18:04.877 回答
0

您可以使用管道中的另一个程序修改标准输出的输出。当您运行您使用的程序时 | 将输入通过管道传输到下一个程序。下一个程序可以对输出做任何事情。用于修改程序输出的通用程序是 sed,或者您可以自己编写一些东西来修改先前程序中的数据。

shell 程序类似于:

while read line; do
    # do something with $line and output the results
done

所以你可以:

 the_original_program | the_above_program
于 2012-05-04T17:10:34.033 回答