繁体   English   中英

在变量中进行流程替换的Bash问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM