バックグラウンドでフォルダ内のすべてのスクリプトを実行する

バックグラウンドでフォルダ内のすべてのスクリプトを実行する

1つのディレクトリ内のすべてのスクリプトを同時に実行したいと思います。

すべてのスクリプトのリストを取得し、「ls ./*.sh」を使用してディレクトリの最初のスクリプトを実行できることを知っていますが、すべて実行することはできないようです。

また、中かっこ拡張{./*.sh;を試しましたが、最初のスクリプトのみを実行しました。

これらすべてを実行する方法を見つけたら、すべてバックグラウンドで実行したいと思います。

forループを使用してこれを行うことができることを知っていますが、単にタスクを実行するワイルドカードまたは中括弧拡張を使用する単純なライナーがあることを願っています。

どうすればいいですか?

ベストアンサー1

for script in ./*.sh; do "$script" & done
wait

または、GNUを使用して同時呼び出しの数を制限しますxargs

xargs -n1 -P5 -r0a <(printf '%s\0' ./*.sh) env

(スクリプト名に=文字が含まれていないとします。)

または以下を使用してzsh

autoload zargs # best in ~/.zshrc
zargs -n1 -P5 ./*.sh -- command

(ここでは最大5個)

これらのスクリプトが出力を生成すると、深刻なインターリーブが発生する可能性があります。 GNUは、parallel各コマンドの出力を別々の一時ファイルに保存し、順次出力してこの問題を解決します。

parallel -j0 exec ::: ./*.sh

-j0これらすべてを並列に実行するには、CPUコア数の制限を削除するか、直接数値を指定してください)。

おすすめ記事