【问题标题】:How to I write this output command to a file如何将此输出命令写入文件
【发布时间】:2019-12-16 10:37:24
【问题描述】:

我正在尝试从文件中获取每个带有尾部的新行并将其转换为 hexdump,但我无法将其写入文件,我尝试使用 >>| tee -a destfile 但是它没有给出任何错误但停止工作。

所以,我有一个二进制文件(data.bin),它总是用脚本增加新行。我正在尝试读取并将其转换为十六进制,效果很好,并且输出良好:

tail -f data.bin | hexdump -e '16/1 "%02x " "\n"'

这会输出这个:

01 55 1d fa 14 ae b5 41 ec 51 3c 42 64 55 00 00
74 5e f7 5d 00 00 00 00 02 55 1d fa 33 33 b3 41
7b 14 3f 42 63 55 00 00 74 5e f7 5d 00 00 00 00

当我尝试这样做时

tail -f data.bin | hexdump -e '16/1 "%02x " "\n"' >> destfile.txt 

它创建一个空文件并且不写任何东西。

【问题讨论】:

  • 您能否向我们展示您使用的确切命令及其结果(创建了一个空文件,未创建文件,...)?通常... >> file 应该可以工作。
  • @GonçaloSantos 请edit您的问题添加所需的信息,而不是在评论中回答。
  • 如果将命令的输出重定向到文件,当stdout 连接到终端时,大多数程序将使用完全缓冲输出而不是行缓冲输出。如果tail -f 没有产生足够的输出,您可能需要等待足够长的时间才能看到文件中的输出。
  • @Bodo 对不起,我已经编辑过了。我会尝试等待更长的时间
  • @Bodo 直到现在它仍在运行,它没有向文件写入任何内容

标签: linux bash tail hexdump


【解决方案1】:

当您重定向命令的输出时,输出流将完全缓冲,因此在刷新之前它不会可见。您可以阅读例如this link 了解更多信息。

要使输出行缓冲,您可以使用 GNU coreutils 中的 stdbuf 实用程序:

stdbuf -oL tail -f input | stdbuf -oL hexdump -e '16/1 "%02x " "\n"' >> destfile.txt 

这样输出将被刷新每一行。

【讨论】:

  • 这成功了!!!天哪,非常感谢,希望我从现在开始学习更多 bash!
猜你喜欢
  • 2012-02-18
  • 2021-02-26
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多