Dd

為什麼 dd 不喜歡從程序替換中獲取輸入?

  • November 14, 2019

程序替換(我認為是用未命名的管道實現的)有什麼不兼容的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應該能夠尋求

這似乎是由於您的 shell 在擴展程序替換時添加了前導空格(或以其他方式執行參數拆分)引起的。我們可以證明這一點:

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

假設這種行為在您可以獲得的最新版本上是可重現的,我認為除了送出錯誤報告外,您無能為力,包括證明dd該錯誤導致實際問題的合理案例。

您可能會考慮切換 shell,但我可以理解這是否對您不利!

引用自:https://unix.stackexchange.com/questions/552189