Shell-Script
使用 shell 腳本執行具有多個參數的程序
我有一個 python 程序,我通過命令行(Mac OSX)執行它:
python -W ignore Experiment.py --iterations 10
該文件應使用不同的值
Experiment.py
多次執行。--iterations
我一個接一個地手動完成,所以當一個執行完成時,我用 different 執行第二個--iterations
,依此類推。但是,我不能總是靠近我的筆記型電腦來執行所有這些,所以我想知道是否有一種方法可以使用shell script
我可以聲明所有執行在一起,然後 shell 腳本一個接一個地執行它們(不是並行的,只是按順序執行,因為我我會自己做的)?就像是: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
怎麼辦?
您可以使用 for 循環:
for iteration in 10 100 1000 10000 100000; do python -W ignore Experiment.py --iteration "${iteration}" done
如果您有多個參數,並且想要所有參數的所有各種排列,正如@Fox 在下面的評論中指出的那樣,您可以使用嵌套循環。例如,假設您有一個
--name
參數,其值可以是n1
、n2
和n3
,那麼您可以這樣做: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
在進行下一個之前對 name 進行所有實驗,則可以將 name 循環設置為“外部”循環。for name in ...; do for iteration in ...; do