[英]Bash issue with process substitution in a variable
我试图在bash脚本中获得dd命令,并将“ if”设置为变量。 该变量可能是/ dev / zero或可能与<(yes $'\\ 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
Bash不会解析变量的内容并将其直接传递给dd,后者不知道如何处理它。 您可以使用“ eval”强制Bash解析变量:
write_file="<(yes $'\01' | tr -d \"\n\")"
command="dd if=$write_file bs=2048 seek=1 of=/dev/sda count=524288"
eval "${command}"
好吧..我想我需要在dd前面加一个“ eval”。
所以:
write_file="<(yes $'\x5a' | tr -d \"\n\")"
eval dd if=$write_file bs=2048 seek=1 of=/dev/sda count=5242
作品! 我猜它在执行变量替换或类似操作后会重新解析。
我从这里得到了提示
有趣的是我昨天尝试使用eval
但无法正常工作。 我一定在某处缺少引号或转义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.