我已经尝试了大约一个小时,以找到解决该问题的理想方法。我的目标基本上是编写一个带宽控制管道命令,该命令可以在各种情况下重用(不仅仅用于网络传输,我知道scp -l 1234)。我想做的是:
X几秒钟。Y从管道读取数量(如果没有足够的数据,则小于Y)。哪里:
X可能是1..n。Y 可能是1个字节,直到某个较高的值。我的问题是:
我走过或至少想到的道路:
while read data构造,它将过滤您使用的编码中的所有白色字符。dd bs=1 count=1和循环。dd似乎没有东西的时候没有不同的退出代码if。这使得更难知道何时停止循环。如果我将标准错误重定向到一个临时文件,请读取该文件以检查是否已传输某些内容(如在stderr上打印的统计信息中),然后重复该方法,则该方法应该可以使用。但是我怀疑如果在大量数据上使用它会非常慢,并且有可能我想跳过创建任何临时文件。关于如何使用Bash尽可能干净地解决此问题的任何想法或建议?
可能是pv -qL RATE?
-L RATE, --rate-limit RATE
Limit the transfer to a maximum of RATE bytes per second. A
suffix of "k", "m", "g", or "t" can be added to denote kilobytes
(*1024), megabytes, and so on.
Run Code Online (Sandbox Code Playgroud)