是否可以在shell中对写入标准输出的行进行更改?

是否可以在shell中对写入标准输出的行进行更改?,shell,stdout,Shell,Stdout,是否可以像许多程序(如scp)那样,在shell中对写入标准输出的行进行更改 关键是允许我基本上有一个自动售票机或某种监视器,而不必在屏幕上滚动。您可以使用管道中的另一个程序修改stdout的输出。运行程序时,使用|将输入导入下一个程序。下一个程序可以对输出执行任何操作。用于修改程序输出的通用程序是sed,或者您可以自己编写一些东西来修改前一个程序中的数据 shell程序类似于: while read line; do # do something with $line and outp

是否可以像许多程序(如scp)那样,在shell中对写入标准输出的行进行更改


关键是允许我基本上有一个自动售票机或某种监视器,而不必在屏幕上滚动。

您可以使用管道中的另一个程序修改stdout的输出。运行程序时,使用|将输入导入下一个程序。下一个程序可以对输出执行任何操作。用于修改程序输出的通用程序是sed,或者您可以自己编写一些东西来修改前一个程序中的数据

shell程序类似于:

while read line; do
    # do something with $line and output the results
done
所以你可以:

 the_original_program | the_above_program

您可以使用控制字符和来操纵终端。例如,
\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."

使用,您可以执行更多操作,如清除屏幕的一部分,跳转到您想要的任何位置,并更改输出颜色。

您可以通过打印
\r
字符覆盖最后一行打印内容

例如:

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

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

printf
也可以用来代替
echo-e
@glennjackman谢谢,
echo-e
对我的盒子不起作用!我想你从我的答案中得到了灵感(仅针对示例),我错了吗?@Ben我还没有看到你的答案,当时我决定通过一个循环来澄清这一点。。。只是在shell中创建一个简单循环的方法不多…你不需要所有的行继续字符。你也不需要所有的分号…