次の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 1
command 3
command 2
command 2
command 1