シェルスクリプトを使用して複数のパラメータを持つプログラムを実行する

シェルスクリプトを使用して複数のパラメータを持つプログラムを実行する

コマンドライン(Mac OSX)を介して実行するPythonプログラムがあります。

python -W ignore Experiment.py --iterations 10

ファイルはExperiment.py異なる値で複数回実行する必要があります--iterations。私はこの操作を手動で繰り返し実行するので、ある実行が完了したら別の実行として2回目の実行を実行します--iterations。しかし、常にラップトップの近くにいるわけではないので、すべてshell script一緒に実行することを宣言してから、シェルスクリプトを介して1つずつ(並列ではなく)実行する方法があるかどうか疑問に思います。ただ順番にちょうど私のように(私は自分でやりますか?)それは次のとおりです。

python -W ignore Experiment.py --iterations 10
python -W ignore Experiment.py --iterations 100
python -W ignore Experiment.py --iterations 1000
python -W ignore Experiment.py --iterations 10000
python -W ignore Experiment.py --iterations 100000

編集する: 複数のパラメータがある場合はどうなりますか--X --Y --Z

ベストアンサー1

forループを使用できます。

for iteration in 10 100 1000 10000 100000; do
    python -W ignore Experiment.py --iteration "${iteration}"
done

@Foxが以下の説明で指摘したように、複数のパラメータがあり、すべてのパラメータのさまざまな置換が必要な場合は、ネストされたループを使用できます。たとえば、値が、およびである可能性があるパラメーター--nameがあると仮定すると、次のことができます。n1n2n3

for iteration in 10 100 1000 10000 100000; do
    for name in n1 n2 n3; do
         python -W -ignore Experiment.py --iteration "${iteration}" --name "${name}"
    done
done

たとえば、次をファイルに入れてrunExperiment.sh最初の行にすることができます#!/bin/bash。その後、次のいずれかの方法でスクリプトを実行できます。

bash runExperimen.sh

あるいは、スクリプトを実行可能にしてから実行することもできます。

chmod +x runExperiment.sh
./runExperiment.sh

特定の結果に最初に興味がある場合は、ループを構築する方法を案内します。上記の例では、スクリプトは次のように実行されます。

... --iteration 10 --name n1
... --iteration 10 --name n2
... --iteration 10 --name n3
... --iteration 100 --name n1

したがって、次の反復に進む前に、反復10のすべての実験を実行します。逆に、次の実験に進む前に名前に対してすべての実験を実行したい場合は、n1名前ループを「外部」ループに設定できます。

for name in ...; do
    for iteration in ...; do

おすすめ記事