Forループを順次実行に変換する方法

Forループを順次実行に変換する方法

私は次のforループを書きました(より読みやすくするためにここで複数行にわたって表示)。

for F in CLEAN_READS/*_1.fa; do
  R=${F%_*}_2.fa; BASE=${F##*/};
  SAMPLE=${BASE%_*};
  metascript assembly -1 $F -2 $R -o folder_${BASE%_*} &
done

ループを実行すると、すべてのスクリプトが並列に開始されます。スクリプトを順番に実行するようにループをどのように変更できますか?

答え1

この動作の理由は、&コマンドをバックグラウンドに送信し、すぐに次のコマンドに渡すコマンドの最後に追加したためです。

そのループを削除すると、ループは期待どおりに機能するはずです&。ディレクティブを終了するには、ディレクティブを追加する必要があります;(もともと公開されているようにすべての行に入力する場合)。それ以外の場合、シェルはエラーメッセージを生成します。

また、Stéphane Chazelasが指摘したように、変数の拡張を引用する習慣が必要です(適切な場合は、ほとんどの場合、良い紹介を見つけることができます)。ここ

関連情報