从管道读取数据并以延迟时间写入标准输出。也必须处理二进制文件

3 linux bash

我已经尝试了大约一个小时,以找到解决该问题的理想方法。我的目标基本上是编写一个带宽控制管道命令,该命令可以在各种情况下重用(不仅仅用于网络传输,我知道scp -l 1234)。我想做的是:

  1. 延迟X几秒钟。
  2. Y从管道读取数量(如果没有足够的数据,则小于Y)。
  3. 将读取的数据写入标准输出。

哪里:

  • X可能是1..n
  • Y 可能是1个字节,直到某个较高的值。

我的问题是:

  • 它必须支持Bash无法很好处理的二进制数据。

我走过或至少想到的道路:

  • 使用while read data构造,它将过滤您使用的编码中的所有白色字符。
  • 使用dd bs=1 count=1和循环。dd似乎没有东西的时候没有不同的退出代码if。这使得更难知道何时停止循环。如果我将标准错误重定向到一个临时文件,请读取该文件以检查是否已传输某些内容(如在stderr上打印的统计信息中),然后重复该方法,则该方法应该可以使用。但是我怀疑如果在大量数据上使用它会非常慢,并且有可能我想跳过创建任何临时文件。

关于如何使用Bash尽可能干净地解决此问题的任何想法或建议?

Dar*_*ria 5

可能是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)

  • @karatedog stackoverflow不是个人顾问。每个人都将从答案中受益,即使没有立即得到答复。上面的答案实际上为我解决了一些问题。 (3认同)