bashで継続的にコマンドを実行する

bashで継続的にコマンドを実行する

次のbashを使用すると、「list.txt」ファイルに名前が含まれるすべてのフォルダでコマンド1,2,3を実行できます。

#!/bin/bash
cat list.txt | while read i 
do
command1 &
command2 &
command3 &
done

コードのコマンド1、2、3は、「list.txt」ファイルに名前が含まれるすべてのフォルダで一緒に実行されます。すべてのフォルダでコマンドを順番に実行するにはどうすればよいですか(たとえば、最初のコマンドが完了すると2番目のコマンドが起動するなど)。コマンドの間に「待機」を試しましたが、うまくいきません!ここで提案されたソリューション複数のフォルダに対して連続的にコマンドを実行する 効果的な!別の解決策を探しています。

答え1

&前のコマンドが完了したら、次のコマンドが実行されるように削除します。

答え2

順番に実行したいが、まだバックグラウンドで実行していて、各コマンドの戻り値を気にしない場合は、次のようにします。

#!/bin/bash
cat list.txt | while read i 
do
    { command1; command2; command3; } &
done

成功した場合にのみ実行するには、次をcommand2使用できます。command1&&

#!/bin/bash
cat list.txt | while read i 
do
    command1 && command2 && command3 &
done

フォアグラウンドですべてを同期的に実行するには、&完全に削除するだけです。

#!/bin/bash
cat list.txt | while read i 
do
    command1
    command2
    command3
done

答え3

while read -r i #read directory as a raw line
do
    cd "$i"     #cd into the directory
    command1    #run the commands consecutively
    command2
    command3
    cd -        #cd back
done < list.txt

すべてのディレクトリ処理を同時に実行するには(コマンド1〜3が連続したまま)、次のように置き換えます。

    command1   
    command2
    command3

そして

    (
    command1   
    command2
    command3
    )&

答え4

前のコマンドが成功した場合にのみ残りのコマンドを実行するには、&&演算子が正しい選択です。

command 1 &&
command 2 &&
command 3

thenは、0が返された場合(つまり成功)と0が返された場合にのみ実行されますcommand 2。これは、実行が完了するのを待つことを意味します。command 1command 3command 2command 2command 1

関連情報