単一行のbashループで&(アンパサンド)を使用する


58

私はこのコマンドを正常に使用しています。このコマンドは、構成ファイル内の変数を変更し、ループ内でPythonスクリプトを実行します。

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py; done

それぞれDoMyScript.pyが終了する前に実行するのに約30秒かかるので、次のものをスポーンできるようにしながら、それらをバックグラウンドに委ねたいと思います。

以下のようにアンパサンドを追加することで、私がよく知っていることを試しました

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py &; done

ただし、これにより以下のエラーが発生します。

-bash:予期しないトークン `; 'の近くの構文エラー

回答:


85

;後にドロップし&ます。これは構文上の要件です

for((i=114;i<=255;i+=1)); do echo $i > numbers.txt;python DoMyScript.py & done

1
くそー、43秒遅すぎる:)
マーティン・フォン・ヴィッティッヒ

2
@ MartinvonWittich、commiserationによる回答への+1 ;
iruvar

4
それが質問に答えるが、それはOPは、彼らがすべて表示されますすべてのpythonのインスタンスが開始された時間と初期化することなどによって望んでいるだろうではありませんnumbers.txt含みます255
ステファンシャゼル

1
@StephaneChazelasに同意しましたが、質問で与えられた情報を使用してそれについて実際に何ができるかはわかりません。そのための適切なソリューションには、おそらくより多くのコンテキストが必要です。
CVn

3
bashのマニュアルリファレンスは次のとおり
です。gnu.org

14

1_CRの答えに対する Stephaneのコメントを考えると、おそらく以下が必要です。

for i in {114..255}; do { echo $i > numbers.txt && python DoMyScript.py; } & done

ありがとう、グレン。読みやすさの向上のために好きなコードのバリエーションをいくつか試しましたが、おそらく必要な余分なスリープのため、うまくいきませんでした。また、for範囲内の最後の数字を繰り返します...現時点で私が満足しているのは、次のとおりfor((i=1;i<100;i+=1)); do echo $i > numbers.txt;sleep 3; python DoMyScript.py & doneです。バックグラウンドでプロセスを実行させるという主な疑問点は解決されました。
ljs.dev

*もちろん、私は<=元の質問にあったので、あなたが提供した範囲は、私が提供した情報に基づいて完全に適切でした。繰り返しますが、異なるアプローチに感謝します
ljs.dev

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.