是否可以对shell中写入STDOUT的行进行更改,类似于 scp 等许多程序的操作方式?
关键是允许我基本上有一个自动收报机或某种类型的监视器,而不会在整个屏幕上滚动。
答案 0 :(得分:1)
您可以使用控制字符和ANSI escape codes操作终端。例如,\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 escape codes,您可以做更多事情,比如清晰的屏幕部分,跳转到您想要的任何位置,并更改输出颜色。
答案 1 :(得分:1)
您可以通过打印\r
字符来覆盖最后打印的行。
例如:
for i in `seq 1 10`; do
echo -n $i;
sleep 1;
echo -n -e "\r" ;
done
将打印1
然后使用2
更新它,依此类推,直到10。
答案 2 :(得分:0)
您可以使用管道中的其他程序修改stdout的输出。当您运行程序时,您使用|将输入传递到下一个程序。下一个程序可以对输出做任何想做的事情。用于修改程序输出的通用程序是sed,或者您可以自己编写一些修改前一程序数据的程序。
shell程序类似于:
while read line; do
# do something with $line and output the results
done
所以你可以:
the_original_program | the_above_program