より良い方法があります...
この質問が良い答えなしにどれだけ長く続いたかに私は本当に驚いています。の特定のバージョンがqsub
指定されていない可能性があります。qsub
少なくともTorqueとSunGridEngine、おそらく他のスケジューラに存在します。したがって、どちらを使用しているかを知ることが重要です。ここでいくつか話します:
トルク:qsub -F <arguments> command
manページ
これは私が通常どのように使用するかの例です。渡された引数をエコーするだけのこのサンプルスクリプトから始めます。
$ cat testArgs.pbs
#!/usr/bin/env bash
echo $@
私はこのように仕事を提出します:
$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster
そして、これは実行後の出力ファイルの外観です。
$ cat testArgs.pbs.o3883919
--here are the --args
Sun Grid Engine:qsub command [ command_args ]
マニュアルページ
シェルで実行する場合と同じように、コマンドの後に引数を追加するだけです。私はどこにもSGEを実行していないので、この例はありません。しかし、それは以下のSlurmでも同じです。
Slurm:sbatch command [ command_args ]
manページ
ここでは、上記のTorqueの例で使用したものと同じスクリプトを送信します。
$ sbatch testArgs.sh what the heck
Submitted batch job 104331
そして結果:
$ cat slurm-104331.out
what the heck
環境変数のエクスポート!=引数の受け渡し
環境変数のエクスポートは、コマンドに引数を渡すこととは大きく異なります。
ここに違いについての良い議論があります。
上記のすべてのqsub
答えはお勧めし-v
ます。明確にするために、-v
環境変数をエクスポート-F
し、コマンドに引数を渡します。
私は通常、引数を許可してスクリプトをパラメーター化することを好みます。実際、このようなスクリプトを使用する方が、のようなスクリプトを使用するよりもはるかに一般的だとprocess_data.sh --threads 8
思いexport THREADS=8; process_data.sh
ます。