【发布时间】:2022-11-20 00:57:05
【问题描述】:
我正在使用 pax 通过 ssh 链接备份目录。如果想要一份进度报告,说明发生了多少转移。使用 -v 选项,它会将它完成的文件名输出到 stderr,所以我想我可以计算目录中有多少文件,并以某种方式将 stderr 输送到我的 shell 脚本中并报告如何到此为止了。
事情是我不确定如何在不中断 stdout 的情况下通过管道传输 stderr。它在远程机器上运行ksh。
所以这就是我到目前为止将在远程机器上运行的内容:
file_count=$(find $target -type f | wc -l)
count=0
progress() {
while [ $((++count)) -lt $file_count ]; do
echo -n "$((count * 100 / file_count))%\r" 1>&2
read
done
echo 100% 1>&2
}
# This line needs to be modified somehow so that
# stderr goes to progress while leaving stdout
# alone.
echo $target | pax -r -v | progress
似乎即使 read 说它支持 -n,但它不支持,所以我无法从特定句柄读取。
【问题讨论】: