私のコードで複数のプロセスを同時に実行したいです。これ以下の例コードとソースは次のとおりです。スタックエクスチェンジ(Unix&Linux)ウェブサイト。
> #!/bin/bash
> for i in $(cat lis.txt); do
> echo "$i"
> wait
> mkdir "$i"
> done
この単純なコードは、テキストファイルに含まれる名前のリストからディレクトリリストを生成するように設計されています。コードを実行すると、フォルダが1つずつ生成されます。すべてのフォルダを同時に作成するには、つまりすべてのタスクを同時に実行するには、このコードをどのように変更する必要がありますか?
ベストアンサー1
スクリプトはの各行のディレクトリを作成しますlist.txt
。空白を処理できますが、他の奇妙な文字(例:\r or
\ t`などは処理できませんが、ここでは問題ではありません):
#!/usr/bin/env bash
while IFS= read -r dir
do
mkdir -- "$dir" &
done < list.txt
&
スクリプトが完了するのを待たずにすぐに続行するようにタスクをバックグラウンドに送信しますmkdir
。これはほとんど確実に検出できませんが、mkdir
他の作業では重要です。
後で参照できるように任意の文字を処理できる必要がある場合は、代わりにを使用してくださいread -r
。また、より複雑な並列化タスクについては、次の点を確認してください。GNUパラレル。