我正在尝试在bash脚本中获取dd命令,并将“if”设置为变量。 变量可以是/ dev / 0或者可以是复杂的 <(是$'\'01'| tr -d“\ n”)
我似乎可以让后者工作。
write_file=/dev/zero
dd if=$write_file bs=2048 seek=1 of=/dev/sda count=524288
有效。
write_file="<(yes $'\01' | tr -d "\n")"
dd if=$write_file bs=2048 seek=1 of=/dev/sda count=524288
这不起作用。我得到了
dd: invalid option -- 'd'
Try `dd --help' for more information.
但如果我直接
dd if=<(yes $'\01' | tr -d "\n") bs=2048 seek=1 of=/dev/sda count=524288
脚本中的工作正常。
我确信有一些需要完成的转义,但我不会在bash专家附近找出如何做到这一点!
更新:尝试以下建议
write_file="<(yes $'\01' | tr -d \"\n\")"
dd if="$write_file" bs=2048 seek=1 of=/dev/sda count=524288
得到了
dd: opening `<(yes $\'\\01\' | tr -d "\\n")': No such file or directory
答案 0 :(得分:0)
Bash不会解析变量的内容并将其直接传递给dd,dd不知道如何处理它。 您可以强制Bash使用“eval”解析变量:
write_file="<(yes $'\01' | tr -d \"\n\")"
command="dd if=$write_file bs=2048 seek=1 of=/dev/sda count=524288"
eval "${command}"
答案 1 :(得分:0)
好吧..我想我需要在dd前面“eval”。
这样:
write_file="<(yes $'\x5a' | tr -d \"\n\")"
eval dd if=$write_file bs=2048 seek=1 of=/dev/sda count=5242
作品!我猜它在进行变量替换之后会重新解析。
我从here
得到了提示有趣的是我昨天尝试使用eval
,但我无法让它发挥作用。我一定是错过了某些引用或逃避某个地方..