将数组放入并行 bash 脚本中

将数组放入并行 bash 脚本中

我在理解并行过程时遇到了一些困难。 Atm 我正在尝试批量擦除硬盘驱动器,因此创建了一个脚本,但它不会并行运行。

for i in "${!wipe[@]}"; do
       dd if=/dev/zero of=/dev/${wipe[$i]} &
wait 

dd 将磁盘清零,但它会一个接一个地执行此操作,因此在执行 8 个磁盘时,可能会非常耗时。谢谢

答案1

给定的脚本根本不应该运行,因为您缺少donefor 循环。这肯定是摘录,而您遗漏了重要部分。

假设缺失done发生在该片段之后,则等待在 for 循环内,因此您dd在后台启动 ,然后wait在进入下一次迭代之前完成它。

基本上,您的缩进与显示的代码不匹配,并且这不是 python。与 python 不同,bash 忽略缩进。我确信缩进符合你想要的,但如果没有donewait 之前的缩进,它就没有意义。

答案2

像这样的事情可能会起作用:

parallel -j0 --dryrun dd if=/dev/zero of=/dev/{} ::: "${!wipe[@]}"

--dryrun当输出看起来正确时删除。

(还可以考虑用随机数据覆盖硬盘。您可以使用 https://gitlab.com/ole.tange/tangetools/-/tree/master/rand生成大量加密安全的伪随机数据)。

相关内容