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

标签 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 尽可能干净地解决这个问题有什么想法或建议吗?

最佳答案

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

关于linux - 从管道读取数据并写入标准输出,中间有延迟。也必须处理二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463113/

相关文章:

bash - Python - 解析为相对于脚本文件的绝对路径

linux - 使用 ffmpeg 的 Raspberry Pi Youtube 流 : libx264 unknown

Linux - 禁用缓冲 I/O 到子进程中的文件

linux - 从 grep 结果中提取字符串

bash - 如何使用 bash 格式化文本文件,因为它可以在手册页中看到(对齐文本,仅此而已)

bash - 关于 shell 脚本调度的说明

java - RaspBerry Pi 命令行/应用程序 - 列出 IP 设备

linux - 以倒序打印文件 Linux

linux - 如何在 CentOs 7 上设置 yum 使用 tor?

linux - 如何在 bash 中启动读写进程?