为什么 dd 不喜欢从进程替换中获取输入?

为什么 dd 不喜欢从进程替换中获取输入?

有没有关于流程替换的事情(我认为是使用无名管道实现)与 不兼容dd

例如,这会失败:

$ dd if=<(unzip -p raspbian.zip) of=/dev/sdb status=progress        
dd: unrecognized operand ‘/dev/fd/4’
Try 'dd --help' for more information.

但这工作正常:

$ unzip -p raspbian.zip | dd of=/dev/sdb status=progress       
108458496 bytes (108 MB) copied, 19.446285 s, 5.6 MB/s

是否使用if某种方式隐含地告诉dd应该能够寻求

答案1

这似乎是由于您的 shell 在扩展进程替换时添加前导空格(或以其他方式执行参数分割)引起的。我们可以证明这一点:

$ echo if=<(:)
if= /dev/fd/4

dd假设这种行为可以在您可以获得的最新版本上重现,我认为除了提交错误报告(包括证明该错误导致真正问题的合理情况)之外,您在此处无能为力。

您可能会考虑更换 shell,但如果您不喜欢这,我可以理解!

相关内容