並列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はインデントを無視します。インデントが欲しいと確信していますが、done待つ前にインデントがなければ意味がありません。

答え2

次のように動作します。

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

--dryrun出力が正しく表示されたら削除します。

(任意のデータでハードドライブを上書きすることも検討してください。 https://gitlab.com/ole.tange/tangetools/-/tree/master/rand大量の暗号化セキュリティ疑似乱数データを生成します。

関連情報