我想将一些输出传递给另一个程序并显示一个进度条。
代码看起来像这样:
echo "Progress:"
(for i in {1..10}; do echo $i; echo "." > screen; sleep 1; done) | xargs echo
其中screen
会将其指向屏幕。这不起作用,因为它只会将点写入文件屏幕。
我想要做的是输出“。”当脚本正在运行并且最后一次管道所有echo "$i"
时,所以只发生一个管道。
答案 0 :(得分:3)
您必须将回声发送到tty设备。例如,echo'thing'>的/ dev / TTY
但如果你只想在屏幕上显示点,则不需要任何重定向。只回显'。'
答案 1 :(得分:2)
尝试使用/ dev / stderr将内容写入屏幕
E.g。这样的事情应该做到。
echo "Progress:"
(for i in {1..10}; do echo $i; echo -n "." | tee /dev/stderr ; sleep 1; done)
答案 2 :(得分:1)
您可以使用tee。
答案 3 :(得分:1)
如果您只想要一个进度指示器,pv
怎么样?
答案 4 :(得分:1)
如果要复制到标准输出和文件,tee
命令是您的朋友。如果要将其传递给另一个命令而不是文件,可以将文件/dev/tty
(即屏幕)和管道标准输出传输到另一个程序。
答案 5 :(得分:1)
我喜欢pv
输出。它类似于wget显示它的进展。
ubuntu@ubuntu:~$ dd if=/dev/urandom bs=1M count=100 | pv | cat >/dev/null
14MB 0:00:03 [4,84MB/s] [ <=> ]
如果您知道要传输的数据大小,可以指定pv -s
它甚至可以显示估算值:
ubuntu@ubuntu:~$ dd if=/dev/urandom bs=1M count=100 | pv -s 100M | cat >/dev/null
14MB 0:00:03 [4,84MB/s] [===> ] 14% ETA 0:00:18