私は中かっこ拡張について学び、それを利用して別のコマンドライン引数を使用して同じC ++プログラムを起動できることを願っています。
端末で実行されるコードは次のとおりです。
mpirun -n 1 main.exe 1 10 0.1 1 5
main.exeの後の数字は私のプログラムの入力パラメータです。
私はこのようなことをしたい:
mpirun -n 1 main.exe 1 10 {0.1,0.2} 1 5
コードを2回実行したいです。一度は0.1で、一度は0.2を3番目の引数として使用したいと思います。
うまくいかない理由と回避策は何ですか?
最高
ベストアンサー1
いいえ、動作しません。このコマンドを実行すると、支柱の拡張が拡張されます。中かっこ拡張だけが影響を受け、複数のコマンドを実行しません。あなたの場合は次のとおりです。
mpirun -n 1 main.exe 1 10 {0.1,0.2} 1 5
単に次のようになります。
mpirun -n 1 main.exe 1 10 0.1 0.2 1 5
別の値で 2 回実行するには、次のようにします。
for i in {0.1,0.2}; do
mpirun -n 1 main.exe 1 10 "$i" 1 5
done
それが実行されます。
mpirun -n 1 main.exe 1 10 0.1 1 5
続いて
mpirun -n 1 main.exe 1 10 0.2 1 5
もちろん、この特別なケースでは、支柱の拡張は不必要に複雑なので、次のことを行う必要があります。
for i in 0.1 0.2; do
mpirun -n 1 main.exe 1 10 "$i" 1 5
done
このような内容を理解するのに役立つ方法は、set -x
(bashを使用していると仮定して)実際に実行されたコマンドを表示することです。
$ set -x
$ mpirun -n 1 main.exe 1 10 {0.1,0.2} 1 5
+ mpirun -n 1 main.exe 1 10 0.1 0.2 1 5
[. . .]
を使用して再びドラッグできますが、set +x
シェルが複雑なコマンドをどのように拡張するかを正確に確認し、実際に実行されている内容を確認できます。