是否有shell命令来延迟缓冲区?

rom*_*m1v 10 bash shell

我正在寻找一个shell命令X,例如,当我执行时:

command_a | X 5000 | command_b
Run Code Online (Sandbox Code Playgroud)

所述stdoutcommand_a被写入stdincommand_b(至少)5-秒钟后.

一种延迟缓冲.

据我所知,buffer/ mbuffer可以以恒定速率写入(每秒固定的字节数).相反,我想要一个恒定的时间延迟(t = 0是X读取command_a输出块时,在t = 5000时必须将此块写入command_b).

[编辑]我已经实现了它:https://github.com/rom1v/delay

Dan*_*ego 7

我知道你说你正在寻找一个shell命令,但是如何使用子shell来获得优势呢?就像是:

command_a | (sleep 5; command_b)
Run Code Online (Sandbox Code Playgroud)

所以对于grep文件来说cat(我知道,我知道,使用不好cat,但只是一个例子):

cat filename | (sleep 5; grep pattern)
Run Code Online (Sandbox Code Playgroud)

一个更完整的例子:

$ cat testfile
The
quick
brown
fox
$ cat testfile | (sleep 5; grep brown)
# A 5-second sleep occurs here
brown
Run Code Online (Sandbox Code Playgroud)

或者,正如Michale Kropat所建议的那样,群组命令sleep也会起作用(并且可以说更正确).像这样:

$ cat testfile | { sleep 5; grep brown; }
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记命令后面的分号(这里是grep brown),因为它是必要的!

  • 组命令而不是子shell也应该有效. (4认同)
  • 这只是在开始时提供5秒的延迟.如果command_b正在以比command_a生成它更快的速度读取数据,它将迅速赶上,导致以后从command_a输出没有延迟 (3认同)

rom*_*m1v 5

因为似乎这样的命令不存在,所以我用 C 实现了它:https: //github.com/rom1v/delay

delay [-b <dtbufsize>] <delay>
Run Code Online (Sandbox Code Playgroud)